使用具有多对多关系的NSPredicate来获取父对象

时间:2015-02-03 18:41:32

标签: objective-c cocoa core-data nspredicate

也许是因为我在3天内没有睡觉,但是这个真的让我失望了。我处于早期阶段,但这是我想要做的事情,获得​​知道孩子的父ManagedObject - 使用对象本身,而不是属性。

示例:

实体A:商店(属性可以是:storeName,storeAddress等... item(relationship))

实体B:项目(属性可以是:itemName,storename(重复,当项目添加到db时),store(relationship))

这些关系具有多对多关系 - 每个项目都有一个商店。但是,我可以从同一家商店或同名商店不止一次地购买同一件商品 - 例如Von's的M& M包。结果,如果我使用的话,我会得到重复:

Item *aItem = [[itemArrayController selectedObjects] objectAtIndex:0];

NSPredicate *predicateTemplate = [NSPredicate predicateWithFormat: @"storeName like %@", aItem.storename];

我尝试了这个和其他变化(没有成功):

NSPredicate *predicateTemplate = [NSPredicate predicateWithFormat: @"item like %@", Item];

错误是我不能将它用于多对多关系 - 好的,可以理解,但我可以使用什么?

是的,我可以引入一个将它们链接在一起的属性,但我试图避免这种情况。核心数据已经将这些联系在一起,应该有一种方法可以利用它。

思想?

1 个答案:

答案 0 :(得分:1)

Store - > Item是一种多对多关系,您需要找到匹配的stores(大概)ANY item。对此的谓词是:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY item == %@", aItem];

或者,您可以使用反向关系访问父级:

Store *myStore = [aItem valueForKey:@"store"];

或者,如果您已创建NSManagedObject的子类,则可以使用点表示法:

Store *myStore = aItem.store;