6

내가 지금과 같은 핵심 데이터 모델을 가지고 ...NSFetchedResultsController : 정렬 기술자 및 섹션

[Country] <--->> [League] <--->> [Match] 

그리고 나는 UITableViewMatches를 표시 할 NSFetchedResultsController을 사용하고 있습니다.

이전에 수 백만 번 해 보았지만 몇 가지 이유로 섹션이 잘못되어 왜 작동하지 않습니다.

나는

NSSortDescriptor *countrySD = [NSSortDescriptor sortDescriptorWithKey:@"league.country.name" ascending:YES]; 
    NSSortDescriptor *leagueSD = [NSSortDescriptor sortDescriptorWithKey:@"league.name" ascending:YES]; 
    NSSortDescriptor *dateSD = [NSSortDescriptor sortDescriptorWithKey:@"startDate" ascending:YES]; 
    request.sortDescriptors = @[countrySD, leagueSD, dateSD]; 

먼저 내가 올바른 순서대로 넣어 가지고 검사 할 ...과 같이 정렬 디스크립터를 만들었습니다. 먼저 country.name으로 정렬 한 다음 league.name으로 정렬 한 다음 startDate으로 정렬해야합니다.

  1. Albania에서 뭐든지 Spain 아무것도 앞에 와야한다.
  2. 단일 국가의 경우 League 1에있는 내용은 모두 League 2에 있어야합니다.
  3. 단일 리그에서 모든 경기는 가장 빠른 순서대로 startDate 순서로 표시되어야합니다. 그럼이 함께 NSFRC을 만드는거야

...

_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self.moc sectionNameKeyPath:@"league.leagueID" cacheName:nil]; 

그래서이해야 그룹 다른 league.leagueID 값이 일치하여 테이블. 그것은 비록 작동하지 않습니다

Albania - League 1 
    12:00 
    13:00 
Albania - League 2 
    09:00 
    14:00 
France - League 1 
    09:00 
Spain - A League 
    08:00 
    12:00 
Spain - B League 
    09:00 

그것은 ... 같은 것을해야한다. 같은 리그에서 여러 헤더를 얻습니다. 일치 항목 중 일부는 잘못된 헤더 등 아래에 표시됩니다.

잘못된 리그 아래에 나타나는 경기의 값 (NSLogged)을 확인했으며 실제로 올바른 리그를 가졌습니다. 따라서 그들은 Spain - A League이더라도 France - League A (예를 들어) 아래에 표시됩니다.

어떻게 해결할 수 있습니까?

답변

15

sectionNameKeyPath 인수로 사용되는 키 경로는 첫 번째 정렬 설명자에서 과 동일한 키이거나 동일한 순서를 생성해야합니다.

두 개의 정렬 설명자를 그룹화에 사용할 방법이 없습니다. 가져온 결과 컨트롤러의 결과가 섹션으로 나뉩니다.

+0

감사합니다. 가져 오기 요청으로 그것을 수행하고 내 자신의 컨텍스트 감시자를 설정하는 데 의지해야 할 것 : ( – Fogmeister

+3

@ Fogmeister : 또는 '10'을 보유하는 추가 특성을 추가하여이를 섹션 키 및 첫 번째 정렬로 사용할 수 있습니다 설명자. –

+0

오, 그게 계획처럼 들리네. 리그 수업에 그걸 넣을까요? – Fogmeister

관련 문제