使用 NSPredicate 中的聚合函数检查 BOOL 值

Posted

技术标签:

【中文标题】使用 NSPredicate 中的聚合函数检查 BOOL 值【英文标题】:Check BOOL value with aggregate functions in NSPredicate 【发布时间】:2013-01-25 09:59:34 【问题描述】:

我有两个实体,分别称为文件夹和文件,文件夹与文件实体具有一对多的关系。文件实体有一个名为 completedStatus 的属性,它是一个 BOOL。我需要检查哪些文件在特定文件夹中具有此 completedStatus == TRUe。文件 NSOrderedSet。


为此,我通过阅读文档尝试了这种方式,但它不起作用

[NSPredicate predicateWithFormat:@"completedStatus = 1 IN %@", file.note]];

所以请帮帮我。

问候 兰吉特

【问题讨论】:

您有一个File 对象数组,并且您希望该数组中的所有文件都包含completedStatus = 1 @MartinR,谢谢你的回复,我想要你问的一样 【参考方案1】:

这应该做你想做的:

NSArray *files = ... // your array of File objects
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"completedStatus = 1"];
NSArray *completedFiles = [files filteredArrayUsingPredicate:predicate];

更新: NSOrderedSet 没有使用谓词进行过滤的方法。但是您可以将有序集folder.file 转换为数组:

NSArray *files = [folder.file array];

然后像上面那样继续。

或者,您可以使用谓词对 文件 实体发出获取请求

[NSPredicate predicateWithFormat:@"completedStatus = 1 && folder = %@", theFolder]

假设您已经定义了从 File 实体到 Folder 实体的反向关系 folder

【讨论】:

嘿@Martin R,对不起,实际上我想从 NSOrderedSet 而不是从 NSArray.Here folder.file 上面提到的 NSOrderedSet 非常感谢,但我想知道,我上面的代码出了什么问题,使用聚合函数“IN”,你能解释一下吗? @Ranjit:“IN”用作“属性 IN %@”,而不是“条件 IN %@”,因此您的语法不正确。

以上是关于使用 NSPredicate 中的聚合函数检查 BOOL 值的主要内容,如果未能解决你的问题,请参考以下文章

NSPredicate 用于检查核心数据中的 NULL 和空白字符串

使用 NSPredicate 过滤核心数据中的对象

NSPredicate ALL 与 SQLite 存储聚合

NSPredicate 在核心数据中的多对多关系

PostgreSQL中的选择或布尔聚合函数

NSPredicate 与正则表达式检查字母数字