过滤与核心数据的关系
Posted
技术标签:
【中文标题】过滤与核心数据的关系【英文标题】:Filtering relationships with Core Data 【发布时间】:2011-12-09 13:05:46 【问题描述】:我设置了一个 Core Data 对象图,这样
Grandparent--(hasMany)-->>Parent--(hasMany)-->>Child
每个实体都有一个'modified'
属性。我想执行一个提取,返回每个祖父母实体,并在某个日期之后修改日期。这应该包含在该点之后修改日期的所有父实体,与子实体相同。
我可以使用
轻松获取祖父母列表fetchRequest.predicate = [NSPredicate predicateWithFormat:@"modified > %@", lastSyncDate];
有没有办法写一个谓词,以便我可以用同样的方式过滤它的关系?谢谢!
【问题讨论】:
【参考方案1】:你应该可以做这样的事情:
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"modified > %@ OR ANY parents.modified > %@ OR ANY parents.children.modified > %@",
lastSyncDate,
lastSyncDate,
lastSyncDate];
(Parent
和 Child
的属性分别称为 parents
和 children
。只需将它们更改为您所称的任何名称。)
我建议您阅读以下内容: http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Predicates/Articles/pSyntax.html#//apple_ref/doc/uid/TP40001795-215891
更新
看来你不能这样做。我认为您实际上需要使用SUBQUERY
。这个问题与您想要做的类似:
What's better way to build NSPredicate with to-many deep relationships?
【讨论】:
这会抛出异常:'NSInvalidArgumentException',原因:'这里不允许多对多键' 对不起,我没有能力正确测试它,但你说得对,这实际上不会起作用。我已经更新提到SUBQUERY
和另一个类似问题的链接。希望这能让你走上正轨。【参考方案2】:
我最终只是抓住了我的整个对象图并使用过滤关系
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"modified > %@", lastSyncDate];
NSArray *modifiedChildren = [[parent.children allObjects] filteredArrayUsingPredicate:predicate];
它的效率不是很高,但似乎可以解决问题。
【讨论】:
以上是关于过滤与核心数据的关系的主要内容,如果未能解决你的问题,请参考以下文章