使用布尔值的NSPredicate不会将布尔值与NO进行比较

Chr*_*ker 15 cocoa core-data nspredicate

我正在使用CoreData,我的实体有一个名为"isReward"的布尔属性.

我正在尝试获取实体并过滤掉所有结果,其中isReward == YES.

isReward != YES 不起作用.

isReward == NO 不起作用.

NSPredicate predicateWithFormat:"isReward != %@", [NSNumber numberWithBool:YES]] 不起作用

isReward == Nil 作品.

是什么赋予了?

Ben*_*her 26

我猜你想要:

[NSPredicate predicateWithFormat:@"isReward = NO OR isReward = nil"]
Run Code Online (Sandbox Code Playgroud)

(根据这里的Apple文档,直接比较NO应该是有效的.)

在一般情况下,比较时null/ nil数据计算,null == false计算结果为false null != false评估板false.null通常评估的比较false,除了测试时IS NULL.

我还会说,当您搜索相等而不是不等式时,索引通常会为您提供更好的结果.在您的情况下,这很容易重构(尽管我不确定它对核心数据一般是否重要).

此外,如果您希望它始终为YESNO(并跳过检查nil),则需要将默认值明确设置为NO.

但是,在nil您的应用程序明确设置它之前,您可能会有一些语义值.这完全取决于你想要做的事情.

  • `NSPredicate`语法更像是SQL; 因为不需要赋值运算符,`=`和`==`是等价的.请参阅http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Predicates/Articles/pSyntax.html#//apple_ref/doc/uid/TP40001795-SW1. (4认同)