也许是因为我已经三天没 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/