Рассмотрим предикат (NSPredicate predicateWithFormat:
)
(x | 0) == x
, вычисленный для объекта, где x
- 64-разрядное целое число.Это, конечно, всегда следует оценивать как истинное.При сравнении с базой данных (выборка записей, где хранится предикат) это работает, но при оценке в памяти это имеет место, только если
x <= 0x40000000
Это действительно имеет некоторый неоправданный смысл, поскольку в документации NSPredicate говорится, что операндылогических операндов обрабатываются как 32-разрядные целые числа со знаком - но тогда по той же «логике» оценка предиката по Core Data (более вероятно, SQLite) неверна.
Я вижу два решения:
Оцените предикат в памяти вручную и надеемся, что Apple не изменит поведение NSPredicate в Базовых данных в соответствии с документацией
Каким-то образом можно обойти эту проблему, не имея 64-битных целых чисел
Ни одно из них не особенно привлекательно.Есть другие решения?