NSPredicate的内存中和数据库内部评估给出了不同的结果

考虑谓词( NSPredicate predicateWithFormat:

  (x | 0) == x 

针对x是64位整数的对象进行评估。 当然,这应该总是被评估为真实的。 当对一个数据库进行评估(取得谓词持有的logging)时,这是有效的,但是当在内存中进行评估时,这只有在

 x <= 0x40000000 

由于NSPredicate文档指出,逻辑操作数的操作数被视为32位有符号整数,但是由相同的“逻辑”对核心数据(更可能是SQLite)的谓词进行评估,这实际上会造成一些挫败感,是不正确的。

我可以看到两个解决scheme:

  1. 手动评估内存中的谓词,并希望Apple不会更改Core Data中NSPredicate的行为以匹配文档

  2. 以某种方式解决这个问题没有64位整数

他们都没有特别的吸引力。 任何其他解决scheme