0

내가의NSFetchedResultsController : 문서의 설명 내가 문서에서 알 수있는 바와 같이

The fetch request must have at least one sort descriptor. If the controller generates sections, the first sort descriptor in the array is used to group the objects into sections; its key must either be the same as sectionNameKeyPath or the relative ordering using its key must match that using sectionNameKeyPath.

나는 다음과 같은 방법

[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
            managedObjectContext:mainContext 
             sectionNameKeyPath:@"paymentDate" 
               cacheName:nil]; 

섹션으로 NSFetchedResultsController를 사용하고 애플의 문서에서 몇 가지 해명을해야 할 필요 NSFetchRequestNSFetchedResultsController에 적어도 하나의 정렬 설명자가 있어야합니다. 내가 섹션을 사용하기 때문에 그러나, 정렬 설명처럼해야 다음

[fetchRequest setSortDescriptors:[NSArray arrayWithObjects: 
     [NSSortDescriptor sortDescriptorWithKey:@"paymentDate" ascending:YES], 
     [NSSortDescriptor sortDescriptorWithKey:@"paymentCode" ascending:YES], 
     nil]]; 

나는 다음과 같은

NSFetchedResultsController ERROR: The fetched object at index X has an out of order section name Y. Objects must be sorted by section name'

에서 같은 오류가 발생

[fetchRequest setSortDescriptors:[NSArray arrayWithObjects: 
     [NSSortDescriptor sortDescriptorWithKey:@"paymentCode" ascending:YES], 
     nil]]; 

처럼 정렬이 디스크립터를 사용하는 경우 내 경우 [NSSortDescriptor sortDescriptorWithKey:@"paymentDate" ascending:YES]을 사용하면이 문제를 극복 할 수 있습니다. 아마 나는 운이 좋다;).

그러나 을 의미하거나 키를 사용하는 상대적인 순서는 sectionNameKeyPath을 사용하는 것과 일치해야합니다. 설명을 해 주시겠습니까?

미리 감사드립니다.

답변

1

섹션을 사용하는 경우 FRC는 섹션별로 모든 결과를 그룹화 할 수 있도록 데이터 배열을 정렬하는 방법을 알아야합니다. 따라서 가져 오기 요청의 첫 번째 정렬 설명자로 지정한 항목은 FRC가 올바르게 처리 할 수 ​​있도록 섹션을 그룹화하는 방법과 일치해야합니다.

정확한 필드는 지정할 필요가 없지만 정렬 순서는 동일해야합니다.

예를 들어 첫 번째 정렬 설명자가 섹션별로 배열을 그룹화하는 경우 섹션을 참조하지 않았더라도 괜찮습니다. 대부분의 경우 FRC에서 혼동 될 가능성을 제거하기 위해 명시 적으로 섹션 속성을 지정해야합니다. 그렇지 않으면 예외가 발생합니다. sd1sd2 :

편집

예를 들어, 당신이 두 종류의 기술자가 있다고 가정 해 보자. sd1sectionNameKeyPath의 FRC에 제공된 것과 동일한 키를 사용합니다. sd2은 다른 키를 사용합니다.

전체 배열을 정렬 할 때 둘 다 동일한 섹션의 엔터티를 그룹화하는 최종 배열을 생성하는 경우 sd1 또는 sd2을 첫 번째 정렬 설명자로 사용할 수 있습니다.

기본적으로 FRC는 엔티티를 sectionNameKeyPath을 기준으로 섹션으로 그룹화하므로 섹션 수 및 각 섹션의 행 수를 결정할 수 있습니다. 따라서 입력으로 가져 오는 배열은 sectionNameKeyPath에 상대적인 유사한 그룹으로 정렬되어야합니다.

어레이를 트롤링하는 동안 sectionNameKeyPath을보고 특정 sectionNameKeyPath의 항목을 볼 것으로 예상합니다. 따라서 모든 섹션을 함께 유지하려면 배열을 정렬해야합니다.

첫 번째 정렬 설명자와 동일한 키를 지정하지 않고도이를 수행 할 수 있으면 모든 것이 올바르게 작동합니다. 그렇지 않으면 첫 번째 정렬 설명자와 동일한 섹션 키를 사용해야합니다. 귀하의 답장은

+0

+1입니다. "당신은 정확한 필드를 지정할 필요는 없지만 정렬 순서는 동일해야합니다."라는 것이 무엇을 의미 하는지를 지정할 수 있습니까? 약간의 샘플이 유용 할 수 있습니다 ;-) 감사합니다. –

+0

고마워요 조디. 당신은 핵심 데이터에 대해 잘 알고 있습니다. 건배. –