gpt4 book ai didi

objective-c - NSFetchedResultsController 不对加密属性进行排序

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:06:22 27 4
gpt4 key购买 nike

我正在尝试使用可转换类型加密我的 Core Data 模型中的属性,但在数据已持久保存到 sqlite 数据库后尝试取回结果时遇到了很多问题。我对 Core Data 的主要应用是存储一些与用户相关的数据,然后将其按名字、姓氏等排序,然后将其显示在 TableView 中,使用名字/姓氏的第一个字母作为节标题。似乎加密干扰了结果,因为当我尝试使用 lastName 作为排序描述符使用 NSFetchedResultsController 执行获取请求时,我什么也没得到。我收到以下错误:

CoreData: error: (NSFetchedResultsController) The fetched object at index X has an out of order section name 'S. Objects must be sorted by section name'

我花了很多时间调查这个问题无济于事。有谁知道问题可能是什么以及如何解决它?转换器解密数据后,是否有办法对数据库进行排序?或者有没有一种方法可以取回原始数据,然后在我在 NSFetchedResultsController 的实例中获得数据后对其进行排序?

我用了this加密核心数据属性的来源:

最佳答案

《核心数据编程指南》中有一些相关资料。

You cannot fetch using a predicate based on transient properties (although you can use transient properties to filter in memory yourself). ... To summarize, though, if you execute a fetch directly, you should typically not add Objective-C-based predicates or sort descriptors to the fetch request. Instead you should apply these to the results of the fetch.

There are some interactions between fetching and the type of store. ... The SQL store, on the other hand, compiles the predicate and sort descriptors to SQL and evaluates the result in the database itself. This is done primarily for performance, but it means that evaluation happens in a non-Cocoa environment, and so sort descriptors (or predicates) that rely on Cocoa cannot work.

由于转换器是在从 SQLite 存储获取数据后应用于数据的,因此使用转换后的属性作为排序键不会产生所需的结果。

您的 Core Data 错误可能是由于这些部分使用加密数据排序,但 FRC 的 sectionNameKeyPath(可以是 transient 属性)给出了未加密的数据,这当然是不一致的。

我能想到的唯一解决方案是存储一个额外的未加密属性,该属性具有足够的信息用作排序键(例如,人的首字母)。

关于objective-c - NSFetchedResultsController 不对加密属性进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12845831/

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