将核心数据实体的子集映射为 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] 数组?