Сортировка nsfetchedresultscontroller - PullRequest
       10

Сортировка nsfetchedresultscontroller

1 голос
/ 16 декабря 2011

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

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

Но я хочу, чтобы мой просмотр таблицы (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;

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

1 Ответ

0 голосов
/ 16 декабря 2011

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...