gpt4 book ai didi

iphone - 如何将排序描述符和谓词与核心数据可转换字段一起使用?

转载 作者:行者123 更新时间:2023-12-03 21:21:55 26 4
gpt4 key购买 nike

我有一个我编写的应用程序,它曾经工作得很好。现在有一个新的要求,即所有数据都需要加密,因此我通过使所有核心数据字段类型可转换并为每种数据类型编写自定义转换器来实现加密,该转换器在从数据写入/读取时加密/解密每个数据元素。核心数据存储。

加密工作正常,我可以看到所有数据。问题在于排序似乎被破坏了,就像任何稍微复杂的谓词(包括子查询的谓词)一样。

我猜测在通过转换器发送值之前会对这些值进行排序(即对加密值进行排序)。有什么办法可以解决这个问题吗?我想我可以尝试使用排序描述符并指定我自己的选择器来进行比较并首先显式解密值。如果有效的话我会在这里发布。

不过,谓词情况是一个更大的问题。奇怪的是,它似乎大部分工作正常,但当我执行子查询时(就像关系中两个对象之间的联接)就会失败。使用可转换值和谓词时是否存在已知问题,或者我的转换器中可能存在错误?

以下是不再有效的谓词示例:

[NSPredicate predicateWithFormat:@"isdeleted == NO AND (SUBQUERY(appuserMessages, $am, $am.recAppUserID == %@ AND $am.isTrash == NO).@count > 0)", appuserid];

谓词在与 AppuserMessages 具有一对多关系的 Messages 对象上执行。该谓词应该返回所有未被 isdeleted 且至少有一条 appuserMessage 的消息,其中 recAppUserID 为 appuserid 并且 isTrash 为 false。它曾经有效,但现在没有返回任何内容。

最佳答案

根据更多实验,当您具有可转换的数据类型时,子查询似乎根本不起作用。

排序描述符也不起作用,这是可以理解的原因。排序委托(delegate)给数据库引擎来完成,因此排序是在转换前的行上完成的。就我而言,这意味着它们是根据(随机)加密值而不是解密值进行排序的。

唯一的解决方案似乎是将行提取到可变数组中,然后对数组执行排序(使用 sortWithDescriptors)。

至于子查询,我假设它有类似的问题。可能子查询是由数据库引擎预转换完成的,因此总是失败。同样,解决方案是在获取中执行尽可能复杂的查询,然后在结果的可变数组上使用过滤器执行查询的其余部分(子查询部分)。

关于iphone - 如何将排序描述符和谓词与核心数据可转换字段一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3851715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com