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

时间:2011-08-26 20:01:06

标签: cocoa core-data nspredicate

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

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

isReward != YES不起作用。

isReward == NO不起作用。

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

isReward == Nil有效。

是什么给出了?

1 个答案:

答案 0 :(得分:26)

我猜你想要:

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

(根据Apple文档here,与NO的直接比较应该有效。)

通常,在与数据字词null / nil进行比较时,null == false评估为false null != false评估false。与null的比较通常评估为false,但在测试IS NULL时除外。

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

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

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