3

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 일 일요일"이어야합니다.

+0

fetchResultController 메소드를 게시 할 수 있습니까? – shannoga

+0

+1 흥미로운 질문과 숙제를 마쳤습니다. 위와 같이'fetchedResultsController' 메소드와 섹션 이름에 대한 실제 x 예상 값을 살펴 보시기 바랍니다. – Rog

답변

10

반입 할 때 sectionName 키를 수정해야 할 수 있습니다.

이 키 경로가 fetchRequest의 첫 번째 정렬 설명 자에 의해 지정된 것과 같지 않으면 동일한 상대 순서를 생성해야합니다. 예를 들어 fetchRequest의 첫 번째 정렬 설명자가 영구 속성의 키를 지정할 수 있습니다. sectionNameKeyPath는 지속적 속성에서 파생 된 임시 속성에 대한 키를 지정할 수 있습니다.

관련 문제