6

У меня есть модель данных ядра, как так ...NSFetchedResultsController: сортировать дескрипторы и секции

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

И я использую NSFetchedResultsController для отображения Matches в UITableView.

Я сделал это миллион раз раньше, но почему-то разделы идут не так, и я не могу понять почему.

Я создал сортировки дескрипторы, как так ...

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: В качестве альтернативы вы можете добавить дополнительный атрибут, который содержит '. ' и использовать это как ключ раздела и первый сортировать дескриптор –

+0

Ой, это звучит как план. Я бы сказал, что в классе Лиги? – Fogmeister

Смежные вопросы