
我需要获取包含Feed和Feed的文件夹,这些Feed和Feed都有未读的FeedItems
nspredicate * predicate = [nspredicate predicateWithFormat:@" Feeds.@count > 0 AND Feeds.FeedItems.unread == 0 "];
我收到这个错误
‘NSinvalidargumentexception’,原因:’to-many key不允许在这里’
我如何构造这样的谓词?有可能吗?
解决方法 它不喜欢Feeds.FeedItems.unread == 0,因为Feeds和FeedItem返回一个集,因此谓词不知道要测试哪个对象.尝试ANY Feeds.FeedItems.unread == 0.
但是,你正在倒退.在未读取== 0的情况下获取所有FeedItem会更容易,然后请求每个获取的项目的Feed.folder来获取该文件夹.
复杂谓词通常是一个坏主意,因为随着对象图的复杂性增加以及数据本身的大小增加,您永远无法预测它们执行的搜索的资源消耗.你应该尽可能地走人际关系.
更新:
再看一遍,看起来你需要一个SUBquery.尝试:
nspredicate *p = [nspredicate predicateWithFormat:@"(0 != SUBquery(Feeds,$x,(0 != SUBquery($x.FeedItems,$y,$y.unread==0).@count)).@count)"];
子查询的文档记录很少,但它们本质上是嵌套谓词.他们的格式为:
SUBquery(objects,singleObjectvariable,Expression-for-single-object)
我相信子查询返回集合,因此您可以使用它们上的任何集合运算符,您可以嵌套它们.当你嵌套它们时,它们会走向关系图,这样你就可以任意深入它们.
总结以上是内存溢出为你收集整理的iphone – 具有多对多关系的复杂核心数据谓词全部内容,希望文章能够帮你解决iphone – 具有多对多关系的复杂核心数据谓词所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)