1

У меня есть эта структура в сущности основных данных:Сортировка nsfetchedresultscontroller

ID Region SubRegion SubRegionID CellText 
1  Face  Mouth   2    something 
2  Face  Eyes   1    ... 
3  Face  Nose   4    ... 
... 

Но я хочу, чтобы мой TableView (nsfetchedresultscontroller) сортируются таким образом:

Внутри каждой секции: клетки, отсортированных по ID недвижимости Разделы в tableView: имена SubRegion, но отсортированные по SubRegionID.

Как я могу это достичь? В настоящее время я делаю это, но я не знаю, это лучшая практика для сортировки названия разделов по subregionID:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription 
           entityForName:@"DataBase" inManagedObjectContext:context]; 
[fetchRequest setEntity:entity]; 

NSPredicate *requestPredicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"(Region like '%@')", @"Face"]]; 
[fetchRequest setPredicate:requestPredicate]; 

NSSortDescriptor *ID = [[NSSortDescriptor alloc] 
          initWithKey:@"ID" ascending:YES]; 

[fetchRequest setSortDescriptors:[NSArray arrayWithObjects: ID, nil]]; 

[fetchRequest setFetchBatchSize:10]; 

fetchedResultsController = 
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
            managedObjectContext:context sectionNameKeyPath:@"SubRegion" 
               cacheName:nil]; 

fetchedResultsController.delegate = self; 

Спасибо за ваше время!

ответ

0

В вашем предикате есть избыточность. Вместо

NSPredicate *requestPredicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"(Region like '%@')", @"Face"]]; 

это должно быть просто

NSPredicate *requestPredicate = 
    [NSPredicate predicateWithFormat:@"%K == %@", @"Region", @"Face"]; 

Это может также сделать с тем, как вы создали свой NSFetchedResultsController. Вы должны установить sectionNameKeyPath как «SubRegionID», а не «SubRegion». В вашем tableView datasource методе titleForSection: вам следует вернуть имя субрегиона на основе идентификатора.

+0

Спасибо за ваш совет. Но проблема все еще остается в логике сортировки, которую я использовал. Я получаю ячейки, отсортированные по ID, но имена разделов не сортируются по SubRegionID ... Мне нужны грани (разделы) лица, отсортированные по subregionID, и ячейки внутри этих разделов, отсортированные по ID. У тебя есть какой-нибудь совет? Благодаря! – Samui

+0

Это связано с тем, как вы настраиваете свой NSFetchedResultsController. Вы должны установить 'sectionNameKeyPath' как' "SubRegionID" ', а не' 'SubRegion" '. В вашем методе 'tableView datasource'' titleForSection: 'вы должны затем вернуть имя субрегиона на основе идентификатора. – Mundi

+0

Так я и использовал. Но я думал, что его можно отсортировать с помощью sortdescriptors напрямую. Спасибо за ваш совет! – Samui

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