NSPredicate的内存中和数据库内部评估给出了不同的结果
考虑谓词( NSPredicate predicateWithFormat:
(x | 0) == x
针对x
是64位整数的对象进行评估。 当然,这应该总是被评估为真实的。 当对一个数据库进行评估(取得谓词持有的logging)时,这是有效的,但是当在内存中进行评估时,这只有在
x <= 0x40000000
由于NSPredicate文档指出,逻辑操作数的操作数被视为32位有符号整数,但是由相同的“逻辑”对核心数据(更可能是SQLite)的谓词进行评估,这实际上会造成一些挫败感,是不正确的。
我可以看到两个解决scheme:
-
手动评估内存中的谓词,并希望Apple不会更改Core Data中NSPredicate的行为以匹配文档
-
以某种方式解决这个问题没有64位整数
他们都没有特别的吸引力。 任何其他解决scheme