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

标签 objective-c cocoa core-data nspredicate

也许是因为我已经三天没 sleep 了,但这真的让我很震惊。我处于早期阶段,但这就是我想要做的,获取了解子级的父级 ManagedObject - 使用对象本身,而不是属性。

示例:

实体 A:商店(属性可以是:商店名称、商店地址等...项目(关系))

实体 B:项目(属性可以是:itemName、storename(重复,当项目添加到数据库时)、store(关系))

它们具有一对多关系 - 每个项目都有一个商店。然而,我可以从同一家商店或同名的不同商店多次购买同一商品 - 例如 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];

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

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

想法?

最佳答案

由于 Store -> Item 是一对多关系,因此您需要查找具有(大概)任何 item 的 stores 匹配。其谓词是:

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

或者,您可以仅使用逆关系来访问父级:

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

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

Store *myStore = aItem.store;

关于objective-c - 使用具有一对多关系的 NSPredicate 获取父对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28306373/

相关文章:

ios - 使用 NSManagedObject 子类来传输持久性和非持久性数据

iphone - 在 iPhone 上的 Facebook 上分享来自 bundle 和链接的图像

iphone - 私有(private)接口(interface)和多个实现

ios - 核心数据栈结构

objective-c - 如何检查文件是否在 Cocoa 中被锁定?

iphone - 为什么 Core Data 创建带有属性但没有伴随实例变量的 NSManagedObject?

objective-c - 创建派生属性的最佳方法是什么

ios - 在构建时将 key 添加到 plist

ios - 如何使用 Objective C 创建第一个 Viewcontroller 按钮单击以调用第二个 Viewcontroller 方法?

objective-c - 当焦点和键盘隐藏文本字段时滚动到文本字段