将核心数据实体的子集映射为 section-key-path

Posted

技术标签:

【中文标题】将核心数据实体的子集映射为 section-key-path【英文标题】:mapping a subset of core-data entities as a section-key-path 【发布时间】:2014-03-10 21:17:37 【问题描述】:

我有一个一对多的关系:

Question<<---->Section

一个部分有很多问题。一个问题有一个部分。

我现在创建一个NSFetchedResultsController 以将所有问题按其部分分隔到 UITableView-Sections 中。

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MJUQuestion"];
NSSortDescriptor *sortByName = [NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortByName]];

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] 
    initWithFetchRequest:fetchRequest 
    managedObjectContext:context
    sectionNameKeyPath:@"section.title" 
    cacheName:nil];

现在所有问题都被分成相应的部分,这些部分有效,但不是我想要的。

我不想要所有部分的问题,但我想要特定部分子集的所有问题。

部分本身被划分为类别:

Section<<----->Category

我只想要属于特定类别的部分的问题。 如果我要为该类别的部分做一个NSFetchedResultsController,我会添加一个谓词,如

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"category == %@", category];
[fetchRequest setPredicate:projectPredicate];

但由于情况并非如此,我希望它们作为部分分隔符,我不确定如何正确修改我的 NSFetchRequest

那么我需要如何修改我的NSFetchRequest 以使我获得特定部分子集的问题并将这些部分作为 UITableView-Section 分隔符?

提前致谢。

【问题讨论】:

【参考方案1】:

你快到了。您需要更新谓词并使用关键路径:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"section.category IN %@", categoryArray];

这将导致请求检查每个问题并查看其部分的类别是否在数组中。这会将您过滤到某个类别的子集。

【讨论】:

以上是关于将核心数据实体的子集映射为 section-key-path的主要内容,如果未能解决你的问题,请参考以下文章

使用 RestKit 将一个裸露的 URL 数组映射到核心数据实体

将核心数据行从一个表(实体)映射到 [CLLocation] 数组?

使用 MagicalRecord 在核心数据中映射和发布实体

将 DTO 映射到后端实体

自定义核心数据映射:在现有关系之间插入新实体

核心数据模型迁移