Полагаю, вы захотите:
[NSPredicate predicateWithFormat:@"isReward = NO OR isReward = nil"]
(Согласно документации Apple здесь , прямое сравнение с NO
должно быть действительным.)
В целом, при сравнении с null
/ nil
в терминах данных, null == false
оценивается как false
, а null != false
оценивает false
. Сравнение с null
обычно оценивается как false
, за исключением случаев проверки на IS NULL
.
Я бы также сказал, что индексирование в целом дает лучшие результаты при поиске равенства, а не неравенства. Это довольно просто изменить в вашем случае (хотя я не уверен, что это будет иметь значение для Core Data в целом).
Кроме того, если вы хотите, чтобы оно всегда было YES
или NO
(и пропустите проверку для nil
), вам необходимо явно установить значение по умолчанию NO
.
Однако, вы можете иметь некоторую семантическую ценность, оставляя его nil
, пока он не будет явно установлен вашим приложением. Это действительно зависит от того, что вы пытаетесь сделать.