我正在使用CoreData,我的实体有一个名为“isReward”的布尔属性。
我正在尝试获取实体并过滤掉所有结果,其中isReward == YES。
isReward != YES
不起作用。
isReward == NO
不起作用。
NSPredicate predicateWithFormat:"isReward != %@", [NSNumber numberWithBool:YES]]
不起作用
isReward == Nil
有效。
是什么给出了?
答案 0 :(得分:26)
我猜你想要:
[NSPredicate predicateWithFormat:@"isReward = NO OR isReward = nil"]
(根据Apple文档here,与NO
的直接比较应该有效。)
通常,在与数据字词null
/ nil
进行比较时,null == false
评估为false
和 null != false
评估false
。与null
的比较通常评估为false
,但在测试IS NULL
时除外。
我还会说,当您搜索相等而非不等式时,索引通常会为您提供更好的结果。在你的情况下,这很容易重构(虽然我不确定它对核心数据一般是否重要)。
此外,如果您希望它始终为YES
或NO
(并跳过对nil
的检查),则需要将默认值明确设置为NO
但是,在您的应用程序明确设置它之前,您可能会留下一些语义值nil
。这完全取决于你想要做的事情。