3

我有一个带有属性 ( ) 的NSEntity( ),该属性是从预定义值列表中填充的,即 Poncho、夹克、外套、长袍、上衣、西装等。ClothtypeNSString

我想获取所有 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记录,以便它们以这个(定义的)顺序返回?

4

2 回答 2

7

核心数据获取请求只能对存储在 SQLite 数据库中的属性进行排序(请参阅“核心数据编程指南”中的获取托管对象获取谓词和排序描述符。)

您有以下选择:

  • 获取所有对象,然后使用自定义排序描述符对它们进行排序。但是,如果您将获取的结果控制器用于表视图,这将无济于事。

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

  • 除了将类型存储为字符串属性之外,您还可以定义另一个Type具有属性name和的实体,以及从到order的关系。在这种情况下,您可以对 key path 进行排序。typeClothTypetype.order

于 2012-10-24T08:57:22.070 回答
5

实现自定义订单的唯一方法是引入一个新的类型属性NSNumber来跟踪订单。

[似乎在类别字符串(Poncho 等)之后有更多文本,因此您实际上有许多独特的字符串,它们都必须遵循自定义顺序,只是它们按第一个单词分组。]

如果您真的想将此逻辑与其余数据分开,您可以创建一个ClothType具有属性的新实体,namesortOrder与您的Cloth实体建立关系。

另一种方案是对每个“主要”类别的排序属性乘以 10000,并为同一类别的每个后续类别添加 1。

于 2012-10-24T12:29:18.583 回答