使用 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 值的主要内容,如果未能解决你的问题,请参考以下文章