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

Using NSPredicate with to-many relationship to obtain parent object

可能是三天没睡的缘故吧,这次真的让我很崩溃。我还处于早期阶段,但这是我想要做的,让父 ManagedObject 知道子 - 使用对象本身,而不是属性。

示例:

实体 A:商店(属性可以是:storeName、storeAddress 等...项目(关系))

实体 B:项目(属性可以是:项目名称、商店名称(重复,当项目添加到数据库时)、商店(关系))

它们具有一对多的关系 - 每个项目都有一个商店。但是,我可以从同一家商店多次购买同一件商品,或者从不同的同名商店购买 - 例如 Von's 的一袋 M&M's。结果,如果我使用:

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

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

我试过这个和其他变体(没有成功):

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

错误是我不能在一对多关系中使用它 - 好吧,可以理解,但我能用什么?

是的,我可以引入一个属性来 link 它们在一起,但我正在努力避免这种情况。核心数据 link 已经将这些结合在一起,应该有一种方法可以利用它。

想法?

由于 Store -> Item 是一对多关系,您需要找到 stores 与(大概)匹配的任何 item。谓词为:

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

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

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

或者,如果您已经创建了 NSManagedObject 的子类,您可以使用点符号:

Store *myStore = aItem.store;