如何按 NSFetchedResultsController 中的可转换属性进行排序?

Posted

技术标签:

【中文标题】如何按 NSFetchedResultsController 中的可转换属性进行排序?【英文标题】:How can I sort by a transformable attribute in an NSFetchedResultsController? 【发布时间】:2010-03-08 23:01:17 【问题描述】:

我正在使用 NSValueTransformers 来加密我的核心数据模型中的属性(字符串、日期等),但我很确定它会干扰我的 NSFetchedResultsController 中的排序。

有谁知道是否有办法解决这个问题?我想这取决于排序的执行方式;如果它总是只直接在数据库上执行,那么我可能不走运。如果它对对象本身进行排序,那么也许有一种方法可以在排序发生之前激活转换。

不过,我猜它直接在数据库中,因为排序是获取集合子集的关键,这也是 NSFetchedResultsController 的主要优点。

注意:我应该补充一点,这里有一些奇怪的行为......集合不会在第一个会话(创建对象的会话)中排序,但它会在随后的会话中排序会话(对象已经存在并且正在被检索的地方)。因此,也许排序确实适用于可变形对象,但可能需要注意的是必须先保存它们或类似的东西(?)

【问题讨论】:

【参考方案1】:

如果您在NSFetchedResultsController 中进行排序,那么它是针对存储(即数据库)的。但是,当结果在内存中时,您可以对结果执行“二级”排序,因此可以通过调用 -sortedArrayUsingDescriptors: 进行解密

更新

我相信您的不一致行为可能是基于内存中的内容与直接从磁盘读取的内容。

【讨论】:

以上是关于如何按 NSFetchedResultsController 中的可转换属性进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

NSFetchedresultscontroller 与 tableview 插入新部分崩溃

Core Data 中计算的持久属性

更新相关 NSManagedObject 时更新 UITableView

NSFetchedResultsController:具有相同键的两个排序描述符不起作用。一个降序用于部分,另一个升序用于行

如何按比例缩放UIImageView

如何按时间顺序列出文件?