过滤与Core Data的关系

时间:2011-12-09 13:05:46

标签: iphone objective-c ios ipad core-data

我设置了核心数据对象图,以便

Grandparent--(hasMany)-->>Parent--(hasMany)-->>Child

并且每个实体都有'modified'属性。我想执行一个获取,返回每个祖父母实体,并在特定日期之后修改日期。这应该包含在该点之后具有修改日期的所有父实体,并且与子实体相同。

我可以轻松地使用

获取祖父母名单
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"modified > %@", lastSyncDate];

有没有办法编写谓词,以便我可以用同样的方式过滤它的关系?谢谢!

2 个答案:

答案 0 :(得分:1)

你应该可以这样做:

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"modified > %@ OR ANY parents.modified > %@ OR ANY parents.children.modified > %@", 
                          lastSyncDate,
                          lastSyncDate,
                          lastSyncDate];

ParentChild的属性分别称为parentschildren。只需将它们更改为您调用它们的任何内容。)

我建议你读一下这个: 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?

答案 1 :(得分:0)

我最终只是抓住整个对象图并使用

过滤关系
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"modified > %@", lastSyncDate];
NSArray *modifiedChildren = [[parent.children allObjects] filteredArrayUsingPredicate:predicate];

这不是非常有效但似乎可以解决问题。