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