Оценка NSPredicate в памяти и в базе данных дает разные результаты - PullRequest
2 голосов
/ 20 декабря 2011

Рассмотрим предикат (NSPredicate predicateWithFormat:)

 (x | 0) == x

, вычисленный для объекта, где x - 64-разрядное целое число.Это, конечно, всегда следует оценивать как истинное.При сравнении с базой данных (выборка записей, где хранится предикат) это работает, но при оценке в памяти это имеет место, только если

x <= 0x40000000

Это действительно имеет некоторый неоправданный смысл, поскольку в документации NSPredicate говорится, что операндылогических операндов обрабатываются как 32-разрядные целые числа со знаком - но тогда по той же «логике» оценка предиката по Core Data (более вероятно, SQLite) неверна.

Я вижу два решения:

  1. Оцените предикат в памяти вручную и надеемся, что Apple не изменит поведение NSPredicate в Базовых данных в соответствии с документацией

  2. Каким-то образом можно обойти эту проблему, не имея 64-битных целых чисел

Ни одно из них не особенно привлекательно.Есть другие решения?

...