0

У меня проблемы с NSFetchResultsController и вы ищете небольшую помощь.NSFetchResultsController с разделамиNameKeyPath и порядок результатов

Мой CoreData объект FunCentre имеет следующие атрибуты name, latitude, longitude, country, postcode и favourite. Когда пользователь выбирает строку в представлении таблицы, он устанавливает атрибут favourite равным 1, а при повторном нажатии возвращается к 0. Это все работает отлично, так как я проверил файл sqlite и изменения происходят правильно.

Я хочу использовать разделы для разделения рядов, а не тех, которые не являются. Я хочу, чтобы избранные были перечислены в верхней части таблицы в первом разделе, а остальная часть списка - во втором разделе.

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; 
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 

NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
managedObjectContext:self.managedObjectContext 
sectionNameKeyPath:@"favourite" 
     cacheName:nil]; 

Приведенный выше код работает в то время как в приложении, и изменения фаворитов, однако, когда я закрыть приложение и перезапустить его фаворитами не сгруппированы и просто появляются в алфавитном порядке в основном списке, это еще поставить правильный количество строк в избранном разделе.

SQL Debug Результаты

CoreData: sql: SELECT Z_VERSION, Z_UUID, Z_PLIST FROM Z_METADATA 

CoreData: sql: SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZCOUNTRY, t0.ZFAVOURITE, t0.ZLATITUDE, t0.ZLONGITUDE, t0.ZNAME, t0.ZPOSTCODE FROM ZFUNCENTRE t0 ORDER BY t0.ZNAME 

CoreData: annotation: sql connection fetch time: 0.0051s 

CoreData: annotation: total fetch execution time: 0.0106s for 34 rows. 

CoreData: sql: SELECT t0.ZFAVOURITE, COUNT (DISTINCT t0.Z_PK) FROM ZFUNCENTRE t0 GROUP BY t0.ZFAVOURITE ORDER BY t0.ZFAVOURITE 

Может кто-нибудь сказать мне, почему группировка не работает на перезапуске? а также как изменить порядок группировки? поскольку фавориты появляются внизу, и я хочу, чтобы они были наверху.

Большое спасибо заранее

ответ

2

При использовании sectionNameKeyPath, вы должны добавить дескриптор сортировки, используя тот же ключ (или, по меньшей мере, генерируя одинаковые относительные упорядоченности):

NSSortDescriptor *sort1 = [[NSSortDescriptor alloc] initWithKey:@"favourite" ascending:YES]; 
NSSortDescriptor *sort2 = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; 
NSArray *sortDescriptors = [NSArray arrayWithObjects:sort1, sort2, nil]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 
+0

Спасибо Мартин, что решить эту проблему при запуске с заказом. Как изменить порядок раздела? Я хочу, чтобы избранные были наверху, а остальная часть списка под ним, в настоящее время наоборот. –

+0

@MattPrice: Изменить 'восходящий: YES' на' возрастающий: NO' :-) –

+0

Perfect .. Большое спасибо за быстрый ответ и отличный ответ. –

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