
以两个实体为例的核心数据模型:
>人
>食物
人与食物有2对一的关系:
>最喜欢的食物(1对多)
>讨厌的食物(1对多)
(Person和Food都是NSManagedobject的子类.)
在之前的数据模型中,Person维护了两个NSArray实例变量.如果我想要最喜欢的食物,我可以打电话:
Person *fred = [[Person alloc] init]; NSArray *fredsFavorites = fred.favoriteFoods;
容易挤压.
我正在阅读Core Data的文档,我似乎找不到给定NSFetchRequest获取此NSArray的正确方法,因为我无法定义我想从中获取对象的关系.
NSFetchRequest *request = [[NSFetchRequest alloc] init];[request setEntity:[NSEntityDescription entityForname:@"Food" inManagedobjectContext:[fred managedobjectContext]]];[request setIncludesSubentitIEs:NO];NSArray *fredsFavoriteAndHatedFoods = [[fred managedobjectContext] executeFetchRequest:request error:nil];
这将返回存储在favoriteFoods和hatedFoods中的所有Food项目.我该如何拆分它们?当然有一个简单的解释,但我目前还没有很好地掌握这个概念,无法用Core Data术语解释它,因此我的谷歌搜索毫无结果.
解决方法 获得它的最简单方法是直接访问NSSet关系:NSArray *fredsFavorites = [fred.favoriteFoods allObjects];
(我已经展示了如何从生成的NSSet中获取NSArray).
或者,如果您没有设置反向关系(您应该这样做),您可以使用这样的获取请求:
NSFetchRequest *request = [[NSFetchRequest alloc] init];[request setEntity:[NSEntityDescription entityForname:@"Food" inManagedobjectContext:[fred managedobjectContext]]];[request setPredicate:[nspredicate predicateWithFormat:@"ANY personsWithThisAsFavorite == %@",fred]];NSArray *fredsFavoriteFoods = [[fred managedobjectContext] executeFetchRequest:request error:nil];
这假设人们与最喜欢的人是喜爱的食物的反向关系.除非我读错你的例子,否则最喜欢的食物应该是多对多的关系,因为一个人可以有多种喜欢的食物,而食物可以让多个人以这种食物为最爱.
(请注意,我没有对此进行测试,因此nspredicate可能不是100%正确)
总结以上是内存溢出为你收集整理的objective-c – 针对特定关系的核心数据NSFetchRequest?全部内容,希望文章能够帮你解决objective-c – 针对特定关系的核心数据NSFetchRequest?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)