gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:09:53 27 4
gpt4 key购买 nike

我有 3 个实体。文件夹、Feed 和 FeedItem

我需要获取包含提要的文件夹以及包含未读提要项目的提要

NSPredicate * predicate = [NSPredicate predicateWithFormat:@" feeds.@count > 0 AND feeds.feedItems.unread == 0 "];

我收到此错误

'NSInvalidArgumentException',原因:'此处不允许使用多对键'

如何构造这样的谓词?这可能吗?

最佳答案

它不喜欢 feeds.feedItems.unread==0 因为 feedsfeedItems 返回一个集合,因此谓词不会知道要测试哪个对象。

尝试任何 feeds.feedItems.unread==0

但是,您正在倒退。获取所有 unread==0FeedItem 然后请求每个获取的项目的 feed.folder 来获取文件夹会更容易。

复杂谓词通常不是一个好主意,因为随着对象图复杂性的增加和数据本身大小的增加,您永远无法预测它们执行的搜索的资源消耗。如果可以的话,你应该走人际关系。

<小时/>

更新:

再看一遍,您似乎需要一个子查询。尝试:

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 - 具有对多关系的复杂核心数据谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3487267/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com