2011-12-09 52 views
1

过滤关系我有一个核心数据对象图设置为使得与核心数据

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

,并且每个实体具有'modified'属性。我想执行一个提取操作,在某个日期之后返回每个祖父实体的修改日期。这应包含在该点之后具有修改日期的所有Parent实体,并且与Child实体相同。

我可以轻松抓取使用

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

有没有办法写一个断言,这样我可以以同样的方式过滤其关系祖父母的名单?谢谢!

回答

0

最后我只是抓住了我的整个对象图,并使用

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

这不是非常有效,但它似乎这样的伎俩过滤关系。

1

你应该能够做这样的事情:(。凡为ParentChild属性分别称为parentschildren只要改变他们对什么是你召他们)

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

我建议你对此有读: http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Predicates/Articles/pSyntax.html#//apple_ref/doc/uid/TP40001795-215891

UPDATE

看来你不能那样做。我认为你实际上需要使用SUBQUERY。这个问题类似于你想做什么: What's better way to build NSPredicate with to-many deep relationships?

+0

这会引发异常:'NSInvalidArgumentException',原因:'此处不允许使用多对多密钥' – NathanGaskin

+1

对不起,我无法正确测试它,但是您说得对,实际上并不工作。我已更新提及有关'SUBQUERY'和另一个类似问题的链接。希望能让你走上正轨。 – mattjgalloway

+0

感谢您的帮助! :) – NathanGaskin