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的主要内容,如果未能解决你的问题,请参考以下文章