Shu*_*dri 5 iphone cocoa cocoa-touch core-data
我有3个实体.Folder,Feed和FeedItem
我需要获取包含Feed和Feed的文件夹,这些Feed和Feed都有未读的FeedItems
NSPredicate * predicate = [NSPredicate predicateWithFormat:@" feeds.@count > 0 AND feeds.feedItems.unread == 0 "];
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
'NSInvalidArgumentException',原因:'to-many key不允许在这里'
我如何构造这样的谓词?有可能吗?
Tec*_*Zen 24
它不喜欢feeds.feedItems.unread==0因为feeds并feedItems返回一个集合,因此谓词不知道要测试哪个对象.
试试ANY feeds.feedItems.unread==0.
但是,你正在倒退.获取所有FeedItem位置unread==0然后请求每个获取的项目feed.folder获取文件夹会更容易.
复杂谓词通常是一个坏主意,因为随着对象图的复杂性增加以及数据本身的大小增加,您永远无法预测它们执行的搜索的资源消耗.你应该尽可能地走人际关系.
再看一遍,看起来你需要一个SUBQUERY.尝试:
NSPredicate *p = [NSPredicate predicateWithFormat:@"(0 != SUBQUERY(feeds, $x, (0 != SUBQUERY($x.feedItems, $y, $y.unread==0).@count)).@count)"];
Run Code Online (Sandbox Code Playgroud)
子查询的文档记录很少,但它们本质上是嵌套谓词.他们的格式为:
SUBQUERY(objects, singleObjectVariable, expression-for-single-object)
Run Code Online (Sandbox Code Playgroud)
我相信子查询返回集合,因此您可以使用它们上的任何集合运算符,您可以嵌套它们.当你嵌套它们时,它们会走向关系图,这样你就可以任意深入它们.
| 归档时间: |
|
| 查看次数: |
5454 次 |
| 最近记录: |