CoreData:基于关系的 NSPredicate

Posted

技术标签:

【中文标题】CoreData:基于关系的 NSPredicate【英文标题】:CoreData: NSPredicate based on relationships 【发布时间】:2012-11-29 19:19:51 【问题描述】:

我现在正在使用 Core Data 编写一本食谱。这是我第一次使用 CoreData,到目前为止它一直在工作,但我在 iPad 的拆分视图中使用它时遇到了一些问题。

这是我的对象模型: http://i621.photobucket.com/albums/tt295/Naosu_FFXI/ObjectModel.png

在我的应用中,步骤和成分显示在详细视图的两个表格中。当我有一个食谱时,它按预期工作。但是,无论您选择什么配方,这两个表的 NSFetchedResultsControllers 都会提取所有信息。所以使用 NSPredicate 似乎是最明显的选择。

这是我的 NSPredicate 代码 sn-p:

filteredIngredientsArray = [[NSMutableArray alloc] init];
.... snip ....

//---------- Filtering the ingredients by name ----------
NSError *error = nil;
NSPredicate *ingredientsPredicate = [NSPredicate predicateWithFormat:@"recipe.recipeName == '%@'", selectedName];
[fetchRequest setPredicate:ingredientsPredicate];
NSLog(@"Filtering the INGREDIENTS with this: %@", selectedName);

NSArray *loadedIngredients = [_managedObjectContext executeFetchRequest:fetchRequest error:&error];
filteredIngredientsArray = [[NSMutableArray alloc] initWithArray:loadedIngredients];

[self.ingredientTable reloadData];

当我使用它时,我的表格不会被填满......所以它确实有效,但没有按我想要的那样工作。我的 NSLog 显示 selectedName 变量的值是用户点击的配方的名称。

这一直把我逼到墙边,真的很困扰我,所以任何反馈/帮助都将不胜感激。

【问题讨论】:

【参考方案1】:

去掉谓词格式中%@周围的单引号:

[NSPredicate predicateWithFormat:@"recipe.recipeName == %@", selectedName]

【讨论】:

天哪,我喜欢我如何通过最简单的修复将头撞到墙上......谢谢!只是一个新手问题:那么单撇号到底是做什么的?我应该使用它们吗? @Naosuu:你会使用引号,例如与文字字符串进行比较:"recipe.recipeName == 'apple pie'"。引号内的格式说明符不展开。

以上是关于CoreData:基于关系的 NSPredicate的主要内容,如果未能解决你的问题,请参考以下文章

如何基于另一个实体的一对多关系访问 CoreData 实体?

CoreData 性能:基于多对多关系

CoreData 引用

基于实体关系的核心数据获取

iCloud 中基于 SQLite 的核心数据中的有序关系

核心数据 - 按关系选择