ios - 核心数据获取请求的复杂排序

标签 ios sorting core-data nsfetchrequest nssortdescriptor

我有一个 NSEntity (Cloth),其属性 (type) 是从预定义的 NSString< 列表中填充的 值,即 Poncho 、Jacket、Coat、Gown、Top、Suit 等。

我想获取所有 Cloth 记录,以便根据为 type 定义的顺序对记录进行排序。即 Poncho 的所有记录都在顶部,然后是 Jacket,然后是 Coat,然后是 Gown,然后是 Top,然后是 Suit,等等。

Poncho‎ …
Poncho‎ …
Poncho‎ …
Jacket … 
Jacket … 
Coat …
Coat …
Coat …
Gown …  
Gown …  
Top …
Top …
Top …
Top …
Suit …  
Suit … 

此顺序不是升序或降序,而是自定义的。我如何获取 Cloth 记录,以便它们按此(定义的)顺序返回?

最佳答案

核心数据获取请求只能对存储在 SQLite 数据库中的属性进行排序(请参阅“核心数据编程指南”中的 Fetching Managed ObjectsFetch Predicates and Sort Descriptors。)

您有以下选择:

  • 获取所有对象,然后使用自定义排序描述符对它们进行排序。但是,如果您在 TableView 中使用获取的结果 Controller ,这将无济于事。

  • Cloth 实体中存储一个额外的整数属性 order 并将其用作排序键。这可能是最容易实现的一个,但您当然会有一些冗余。

  • 您可以定义另一个实体 Type,而不是将类型存储为字符串属性,它具有属性 nameorder,并且从 ClothTypetype 关系。在这种情况下,您可以对键路径 type.order 进行排序。

关于ios - 核心数据获取请求的复杂排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13044830/

相关文章:

ios - "Signing Key Required"- 是否可以在 Windows 上使用 DreamWeaver CS6 Extended/PhoneGap 创建 iOS 应用程序?

ios - 模拟器/设备 UI 与 Storyboard 不同

c# - 如何从 Xamarin.Forms 应用程序修改平台特定属性?

c# - C# 中自顶向下归并排序的实现

mysql - 如何根据另一个表中的数据对mysql中的项目进行排序?

cocoa - 核心数据: Common relationship to different types

objective-c - 为什么我的 NSManagedObject 不兼容 KVC?

ios - 从 NSManagedObject 获取类型

ios - 使用 CocoaPods 安装的库的正确方法是什么?

javascript - 在javascript中按字母顺序对数组及其对象键进行排序