NSFetchedResultsController를 사용하여 ~ 1500 엔티티의 중간 크기 코어 데이터 저장소의 결과로 UITableView를 채 웁니다. 결과 컨트롤러는 상당히 표준 적입니다. 잠재적 인 버그에 대한 일부 "핫 스폿"은이 설정에 해당하지 않습니다.NSFetchedResultsController의 섹션 이름이 관리되는 개체 값과 일치하지 않습니다.
-
같은 (주) 스레드 생성
- 관리 오브젝트 컨텍스트는
- sectionNameKeyPath이 섹션 로 결과를 분할하는데 사용된다 (정렬 자주 변경되기 때문에)
- 없음 캐시 사용하면 사용
그러나 내 섹션 결과는 매우 이상합니다. 예를 들어, 섹션 헤더 뷰의 제목을 설정하는 데이 방법을 고려하십시오
(gdb) po [[self resultsController] sectionNameKeyPath]
reviewDateString
(gdb) print section
$11 = 1
(gdb) print (int) [sectionInfo numberOfObjects]
$12 = 4
(gdb) po [sectionInfo name]
Wednesday, September 8th 2010
(gdb) po [[[sectionInfo objects] objectAtIndex:0] valueForKey:@"reviewDateString"]
Sunday, February 13th 2011
(gdb) po [[[sectionInfo objects] objectAtIndex:1] valueForKey:@"reviewDateString"]
Sunday, February 13th 2011
(gdb) po [[[sectionInfo objects] objectAtIndex:2] valueForKey:@"reviewDateString"]
Sunday, February 13th 2011
(gdb) po [[[sectionInfo objects] objectAtIndex:3] valueForKey:@"reviewDateString"]
Sunday, February 13th 2011
: 나는 GDB를 사용하여 중단 점을 사용하여 표시된 라인에 멈춰 섰고, 한
- (NSString *)titleForHeaderInSection:(NSInteger)section {
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.resultsController sections] objectAtIndex:section];
return [sectionInfo name]; // <------- Stopped at breakpoint here
}
을 다음과 같이 조사
문제가 분명해야합니다 - 섹션의 각 관리 객체에 대한 [sectionInfo name]이 sectionNameKeyPath의 값과 일치하지 않는 이유는 무엇입니까? 섹션의 개체가 제대로 그룹화 된 것으로 나타나고 섹션 이름이 올바르게 설정되지 않았습니다.
(gdb) po [[self resultsController] indexPathForObject:(id)[[sectionInfo objects] objectAtIndex:0]]
<NSIndexPath 0x6615660> 2 indexes [459, 4294966310]
를 이제 분명히 위에서의 NSIndexPath는 [1,0],하지이 가짜 값이어야합니다 반환 :이 보면
결과는 더욱 홀수이다.
나는 완전히 뒤죽박죽이다. 누구든지 아이디어가 있습니까? 더 많은 정보가 필요하면이 질문을 볼 것입니다.
[편집 1]
내 NSFetchedResultsController 설정에 대한 하나 개 이상한 것은 내가 (/ 해제 및 ALLOC를 새로 init를) 다시 UISegmentedControl의 선택의 변화에 따라 결과 컨트롤러를한다는 것입니다. 이것은 전체 정렬이 변경되도록 fetch 요청 및 sectionNameKeyPath의 sortDescriptors를 변경하기 위해 수행됩니다.
[편집 2
resultsController @synthesize 방법에 의해 생성 된 디스플레이마다 NSFetchedResultsController위한 단지 속성 접근이다.
섹션 이름의 예상 값이 이미 지정되어 있습니다. 섹션 이름은 "po [sectionInfo name]"바로 아래에 표시된 @ "reviewDateString"키 (sectionNameKeyPath)의 값과 같아야합니다. 그래서이 경우에는 "2011 년 2 월 13 일 일요일"이어야합니다.
fetchResultController 메소드를 게시 할 수 있습니까? – shannoga
+1 흥미로운 질문과 숙제를 마쳤습니다. 위와 같이'fetchedResultsController' 메소드와 섹션 이름에 대한 실제 x 예상 값을 살펴 보시기 바랍니다. – Rog