iphone – 具有多对多关系的复杂核心数据谓词

iphone – 具有多对多关系的复杂核心数据谓词,第1张

概述我有3个实体.文件夹,Feed& FeedItem 我需要获取包含Feed和Feed的文件夹,这些Feed和Feed都有未读的FeedItems NSPredicate * predicate = [NSPredicate predicateWithFormat:@" feeds.@count > 0 AND feeds.feedItems.unread == 0 "]; 我收到这个错误 ‘NSI 我有3个实体.文件夹,Feed& FeedItem

我需要获取包含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 – 具有多对多关系的复杂核心数据谓词所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1016275.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存