如何在Core Data中编写一个BOOL谓词?

我有一个BOOLtypes的属性,我想执行search所有这个属性是YES托pipe对象。

对于string属性很简单。 我创build一个这样的谓词:

 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userName = %@", userName]; 

但是,如果我有一个名为selected的bool属性,我该如何做到这一点,我想做一个谓词呢? 我可以做这样的事吗?

 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"selected = %@", yesNumber]; 

或者我需要其他格式说明符,只是通过YES

从Predicate编程指南 :

您可以指定并testing布尔值是否相等,如以下示例所示:

 NSPredicate *newPredicate = [NSPredicate predicateWithFormat:@"anAttribute == %@", [NSNumber numberWithBool:aBool]]; NSPredicate *testForTrue = [NSPredicate predicateWithFormat:@"anAttribute == YES"]; 

您也可以检查出谓词格式string语法 。

Swift 4.0

 let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(value: true)) 

Swift 3

 let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(value: true)) 

在Swift 3中,你应该使用NSNumber(value: true)

使用NSNumber(booleanLiteral: true) ,通常不鼓励直接使用任何字面初始化,例如SwiftLint (v。0.16.1)将直接生成使用ExpressibleBy...Literal initialiser的警告:

编译器协议初始化违例:不应直接调用在ExpressibleByArrayLiteral等编译器协议中声明的初始化器。 (compiler_protocol_init)

Swift 3.0对此做了一个小小的改动:

 let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(booleanLiteral: true))