使用具有一对多关系的 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;
可能是三天没睡的缘故吧,这次真的让我很崩溃。我还处于早期阶段,但这是我想要做的,让父 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;