NSFetchedResultsController - 对来自单个实体的结果进行分组

时间:2017-02-01 06:21:45

标签: ios objective-c uitableview nsfetchedresultscontroller

假设我的核心数据模型包含以下实体:Family:

enter image description here

我想使用NSFetchedResultsController在UITableViewController中以下列格式显示Family的内容,其中父项是“sections”,其子项列在“parent”下:

enter image description here

在我的视图控制器文件中,我有以下内容:

- (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

有人可以告诉我如何将“孩子”分组到正确的“父母”之下吗?我意识到数据模型可以分开,以便为子和父提供单独的实体;但是,我正在使用遗留代码,暂时无法修改数据模型。

1 个答案:

答案 0 :(得分:0)

我认为你需要使用谓词:

  1. 获取所有家长

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

  2. 循环通过父母并让他们所有的孩子

    NSPredicate * predicate = [NSPredicate predicateWithFormat:@“Child ==%@ AND Parent ==%@”,@ YES,parent.Name];

  3. 此解决方案导致数组构造。不确定,这个答案对你有帮助,因为你正在寻找一个NSFetchedResultsController。