可可 – 具有布尔值的NSPredicate不将布尔值与NO进行比较

我使用的是CoreData,我的实体有一个名为“isReward”的布尔属性.

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

isReward!= YES不起作用

isReward == NO不起作用

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

isReward ==无工作.

是什么赋予了?

我猜你会想要的:

[NSPredicate predicateWithFormat:@"isReward = NO OR isReward = nil"]

(根据Apple docs here,与NO的直接比较应该是有效的.)

通常,当与数据项中的null / n比较时,null == false计算结果为false,null!= false计算结果为false.与null的比较通常评估为false,除非在测试IS NULL时.

我也会说,索引一般会给你更好的结果,当你寻求平等,而不是不平等.这在你的情况下重构是相当简单的(尽管我不确定它对Core Data的影响一般).

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

但是,您可能会留下一些语义值,直到它被应用程序显式设置为止.这真的取决于你想要做什么.

翻译自:https://stackoverflow.com/questions/7209941/nspredicate-with-boolean-is-not-comparing-a-boolean-to-no

转载注明原文:可可 – 具有布尔值的NSPredicate不将布尔值与NO进行比较