我有一个NSEntity
(Cloth
),其属性(type
)是从预定义的NSString
值列表中填充的,即雨披,夹克,外套,礼服,上衣,西装等
我想获取所有Cloth记录,以便根据type
的已定义顺序对记录进行排序。即所有的雨披记录都在上面,然后是Jacket,然后是Coat,然后是Gown,然后是Top,然后是Suit等。
Poncho …
Poncho …
Poncho …
Jacket …
Jacket …
Coat …
Coat …
Coat …
Gown …
Gown …
Top …
Top …
Top …
Top …
Suit …
Suit …
此顺序不是升序或降序,而是自定义。如何获取Cloth
记录,以便以此(已定义)顺序返回它们?
答案 0 :(得分:7)
核心数据获取请求只能对存储在SQLite数据库中的属性进行排序(请参阅“核心数据编程指南”中的Fetching Managed Objects和Fetch Predicates and Sort Descriptors。)
您有以下选择:
获取所有对象,然后使用自定义排序描述符对它们进行排序。但是,如果您使用获取的结果控制器进行表格视图,这将无济于事。
在order
实体中存储其他整数属性Cloth
,并将其用作排序键。这可能是最容易实现的,但当然你有一些冗余。
您可以定义另一个实体Type
而不是将该类型存储为字符串属性,该实体具有name
和order
属性,以及来自{type
的关系Cloth
{1}}到Type
。在这种情况下,您可以对关键路径type.order
进行排序。
答案 1 :(得分:5)
实现自定义订单的唯一方法是引入类型为NSNumber
的新属性以跟踪订单。
[似乎在类别字符串(Poncho等)之后有更多文本,因此您实际上有许多唯一的字符串,所有字符串都必须遵循自定义顺序,只有它们按第一个单词分组。]
如果您确实希望将此逻辑与其他数据分开,则可以创建一个包含ClothType
和name
属性的新实体sortOrder
,并与您的{{{ 1}}实体。
另一种方案是将sort属性与每个“主要”类别相乘,例如10000,并为同一类别中的每个后续类别添加1。