2017-02-01 4 views
0

Допустим, что моя модель основных данных содержит следующие сущности, Семья:NSFetchedResultsController - группировка результатов от одного объекта

enter image description here

Я хотел бы использовать NSFetchedResultsController, чтобы отобразить содержимое семьи в UITableViewController в следующем формате, где родители «секции» с детьми, перечисленных под «родителей»:

enter image description here

на мой взгляд, файл контроллера I га ве следующее:

- (void)setFRC 
{ 
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:[Family entityName]]; 

    NSSortDescriptor *sort1 = [[NSSortDescriptor alloc] initWithKey:@"Child" ascending:YES]; 
    NSSortDescriptor *sort2 = [[NSSortDescriptor alloc] initWithKey:@"Name" ascending:YES]; 

    NSArray *sorters = [NSArray arrayWithObjects:sort1, sort2, nil]; 

    [request setSortDescriptors:sorters]; 

    self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:[MYCoreDataManager managedObjectContext] sectionNameKeyPath:@"Child" cacheName:nil]; 
} 

При использовании кода выше, однако, я получаю следующую таблицу вместо:

enter image description here

Может кто-нибудь сказать мне, как получить «дети», сгруппированных под правильный «родитель»? Я понимаю, что модель данных может быть разделена так, что для дочерних и родительских объектов существуют отдельные объекты; тем не менее, я работаю с устаревшим кодом и пока не имею возможности модифицировать модель данных.

+0

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

+0

Вы пытались 'sectionNameKeyPath: @" ParentName "'? – norders

+0

@JeckyModi - можете ли вы объяснить на примере? Не уверен, что вы подразумеваете под этим. – Vee

ответ

0

Я думаю, вам нужно использовать предикаты:

  1. Получить все родители

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Child == %@", @NO];

  2. Loop через родителей и получить все их дети

    NSPredicate * предикат = [ Предикат NSPredicateWithFormat: @ "Child ==% @ AND Parent ==% @", @YES, parent.Name];

Это решение приводит к конструкции массива. Не уверен, этот ответ помогает вам, так как вы ищете NSFetchedResultsController.

+0

Спасибо, Марко. Да, вы правы в том, чтобы получить родителей, а затем построить конструкцию массива для детей для каждого родителя. Но я ищу решение, которое использует NSFetchedResultsController. – Vee

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