NSPredicate 中使用的 SUBQUERY( ) 是不是不支持所有集合运算符,如 @max、@min?

Posted

技术标签:

【中文标题】NSPredicate 中使用的 SUBQUERY( ) 是不是不支持所有集合运算符,如 @max、@min?【英文标题】:Does SUBQUERY( ) used in NSPredicate not support all collection operators like @max,@min?NSPredicate 中使用的 SUBQUERY( ) 是否不支持所有集合运算符,如 @max、@min? 【发布时间】:2012-08-31 11:17:05 【问题描述】:

我从 Apple 的开发者网站修改了一个示例 CoreDataBooks,并添加了一个属性 num,它是实体 Book 中的一个整数。

NSPredicate *predicate = [NSPredicate predicateWithFormat:"SUBQUERY(book, $b, $b.author == self.author).@min.num == self.num"];

我使用这个NSPredicate 来获取它的元素的数量是所有同一作者书籍中的最小值的书籍,但我收到了这个错误:

'NSInvalidArgumentException',原因:'不支持的 KVC 函数 尾随 keypath SUBQUERY(book, $b, $b.author == author), @min.num'

我想知道子查询是否不支持@max@min 或者我的谓词有问题。

【问题讨论】:

您有没有机会找到这个问题的答案?我发现当集合上的表达式为 TRUEPREDICATE 时,SUBQUERY 可以与集合运算符一起使用,但在评估像 $b.author == self.author 这样的自定义表达式时则不行。 【参考方案1】:

SUBQUERY 结果应该支持所有集合键路径运算符,或者至少文档建议如此。

错误消息似乎表明您的代码中的谓词中有一个逗号。只是被框架修改了吗?

"@min" 返回一个数字。您要求的“.num”键是什么?某种自定义属性? NSNumber 是否通过类别支持?不然我认不出来。您不需要(也不应该尝试)将 NSNumber 对象转换为原始 C 类型或类似的东西。

您是否尝试过类似的方法:

"self.num == SUBQUERY(book, $b, $b.author == self.author).@min" ?

【讨论】:

以上是关于NSPredicate 中使用的 SUBQUERY( ) 是不是不支持所有集合运算符,如 @max、@min?的主要内容,如果未能解决你的问题,请参考以下文章

NSPredicate 表达式中 SUBQUERY 的快速解释

NSPredicate 中使用的 SUBQUERY( ) 是不是不支持所有集合运算符,如 @max、@min?

具有多对多关系的核心数据 - 在 SUBQUERY 中使用 ALL 创建 NSPredicate

使用嵌套的 NSPredicate SUBQUERY

带有 SUBQUERY 的 NSPredicate 不起作用

子查询中的 NSPredicate