与核心数据
问题描述:
过滤关系我有一个核心数据对象图设置为使得与核心数据
Grandparent--(hasMany)-->>Parent--(hasMany)-->>Child
,并且每个实体具有'modified'
属性。我想执行一个提取操作,在某个日期之后返回每个祖父实体的修改日期。这应包含在该点之后具有修改日期的所有Parent实体,并且与Child实体相同。
我可以轻松抓取使用
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"modified > %@", lastSyncDate];
有没有办法写一个断言,这样我可以以同样的方式过滤其关系祖父母的名单?谢谢!
答
最后我只是抓住了我的整个对象图,并使用
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"modified > %@", lastSyncDate];
NSArray *modifiedChildren = [[parent.children allObjects] filteredArrayUsingPredicate:predicate];
这不是非常有效,但它似乎这样的伎俩过滤关系。
答
你应该能够做这样的事情:(。凡为Parent
和Child
属性分别称为parents
和children
只要改变他们对什么是你召他们)
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"modified > %@ OR ANY parents.modified > %@ OR ANY parents.children.modified > %@",
lastSyncDate,
lastSyncDate,
lastSyncDate];
UPDATE
看来你不能那样做。我认为你实际上需要使用SUBQUERY
。这个问题类似于你想做什么: What's better way to build NSPredicate with to-many deep relationships?
这会引发异常:'NSInvalidArgumentException',原因:'此处不允许使用多对多密钥' – NathanGaskin
对不起,我无法正确测试它,但是您说得对,实际上并不工作。我已更新提及有关'SUBQUERY'和另一个类似问题的链接。希望能让你走上正轨。 – mattjgalloway
感谢您的帮助! :) – NathanGaskin