【问题标题】:NSPredicate a relationship objectsNSPredicate 一个关系对象
【发布时间】:2014-09-08 07:32:19
【问题描述】:
我正在处理核心数据,我有两个表
列表
列表项
ListItems 有一个名为“parentlist”且目标设置为“List”的关系
我正在尝试查询 ListItems 的所有父级为 X(列表对象)的 listItems
我尝试过这种方法,但它不起作用
List* myList; // Initialized form other views
NSPredicate *pred = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"List == %@",myList]];
【问题讨论】:
标签:
ios
objective-c
core-data
ios7
【解决方案1】:
您的代码中有两个问题:在谓词中您必须使用关系(“parentList”),
不是目标实体(“列表”)。而且您不应该将字符串格式与
谓词格式。
要获取与给定列表相关的所有 ListItems,谓词将是
List* myList = ...;
NSPredicate *pred = [NSPredicate predicateWithFormat:@"parentList == %@", myList];
【解决方案2】:
我假设您正在寻找的不仅仅是通过列表访问 listItems 吗?如果是这样:
比较核心数据中的对象实际上并不是这样工作的。
你可以通过以下两种方式之一来做到这一点,
简单:在创建时为列表分配 GUID:
[[NSProcessInfo processInfo] globallyUniqueString]
并使用它来比较两个列表。
更难:通过覆盖比较对象来实现对象的比较功能,并以对您有意义的方式比较对象。
- (NSComparisonResult) compare : (List *) other;
然后使用块创建一个 NSPredicate。
您还可以使用 GUID 并在比较函数中使用它,从而允许您稍后对此进行扩展。
【解决方案3】:
如果您有反向关系 listItems(如 Apple 推荐的那样),您可以只使用:
myList.listItems