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

时间:2014-03-10 21:17:38

标签: ios iphone objective-c core-data nsfetchedresultscontroller

我之间有一对多的关系:

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 个答案:

答案 0 :(得分:2)

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

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

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