我有一个我写的应用程序,它曾经工作得很好。现在有一个新要求,即所有数据都需要加密,因此我通过使所有核心数据字段类型可转换并为每种数据类型编写自定义转换器来实现加密,这些转换器在从核心数据存储。
加密工作正常,我可以看到所有数据。问题是排序似乎被破坏了,任何甚至稍微复杂的谓词(包括子查询的谓词)也是如此。
我猜想在它们通过转换器发送之前对值进行排序(即,对加密值进行排序)。有没有办法解决这个问题?我想我可以尝试使用排序描述符并指定我自己的选择器来进行比较并首先显式解密这些值。如果可行,我会在这里发布。
但是,谓词情况是一个更大的问题。奇怪的是,它似乎大部分都可以工作,但是当我进行子查询时失败了(这就像一个关系中两个对象之间的连接)。使用可转换值和谓词时是否存在已知问题,或者我的转换器中有错误?
下面是一个不再起作用的谓词示例:
[NSPredicate predicateWithFormat:@"isdeleted == NO AND (SUBQUERY(appuserMessages, $am, $am.recAppUserID == %@ AND $am.isTrash == NO).@count > 0)", appuserid];
谓词在与 AppuserMessages 具有一对多关系的 Messages 对象上执行。这个谓词应该返回所有没有被删除并且至少有一个 appuserMessage 的消息,其中 recAppUserID 是 appuserid 并且 isTrash 是 false。它曾经工作,但现在什么也没返回。