如何使用一个选择器创建一个按多个键排序的 NSSortDescriptor

Posted

技术标签:

【中文标题】如何使用一个选择器创建一个按多个键排序的 NSSortDescriptor【英文标题】:How to Create a NSSortDescriptor that Sorts by Multiple Keys with One Selector 【发布时间】:2014-05-10 21:00:06 【问题描述】:

我的数据模型是这样的:

User (Entity)
- valueOne (NSNumber Attribute)
- valueTwo (NSNumber Attribute)

我正在使用NSFetchedResultsController 从核心数据中获取User 实体以显示在我的UITableView 中。我无法对获取请求的结果进行排序。我需要按valueOne (divided by) valueTwo 排序。我尝试将@"self"nil 都传递给sortDescriptorWithKey:ascending:selector: 的Key 值以获得User 对象。然后,我将按自定义选择器中的User.valueOne / User.valueTwo 值进行排序,但@"self"nil 似乎都不起作用,因为两者都有错误。该文档似乎没有包含有关如何传递父对象以作为排序依据的任何内容。

我将如何创建一个按valueOne / valueTwo 排序的NSSortDescriptor

【问题讨论】:

【参考方案1】:

这是不可能的。 Core Data 获取请求的排序描述符只能排序 根据实体的(持久)属性。瞬态属性或自定义 (基于 Objective-C 的)比较器方法不能使用。

【讨论】:

感谢您抽出宝贵时间回复。由于我提出的方法是不可能的,也许你可以指出我如何产生这种效果的正确方向? @AdamK:据我所知,唯一的解决方案是将 valueOne/valueTwo 作为另一个持久属性存储在实体中。 - 或者,您可以使用自定义排序方法获取所有对象并在内存中对它们进行排序。但是,您将失去获取结果控制器的所有优势。

以上是关于如何使用一个选择器创建一个按多个键排序的 NSSortDescriptor的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 NSFetchedResultsController 按字母顺序对 UITableView 进行排序?

按多个键值对数据进行排序

CoreData:按类别集中的索引对项目进行排序

如何在多图中按排序顺序打印键的值

连接后如何在 Pyspark Dataframe 中选择和排序多个列

如何从“右键单击”上下文菜单(Windows 资源管理器)中选择多个文件以启动同一个应用程序