核心数据提取请求的复杂sorting

我有一个NSEntityCloth )的属性( type ),这是从预定义的NSString值列表,如雨披,夹克,大衣,礼服,顶部,西装等填充。

我想要获取所有布料logging,以便logging按照定义的type顺序进行sorting。 即雨披的所有logging在上面,然后是外套,然后是外套,然后是礼服,然后是上衣,然后是西装等等。

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

这个顺序不是升序或降序,而是定制的。 如何获取Clothlogging,以便按照(定义的)顺序返回它们?

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

[在类别string(Poncho等)之后似乎有更多的文本,所以你实际上有很多独特的string,都必须遵循一个自定义的顺序,只是它们被第一个字组合。]

如果你真的想从其他数据中分离出这个逻辑,你可以创build一个新的实体ClothType属性namesortOrder并与你的Cloth实体有关系。

另一种scheme是将sort属性乘以每个“主”类别的10000,并为相同类别的每个后续的类别加1。

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

您有以下select:

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

  • Cloth实体中存储额外的整数属性order ,并将其用作sorting键。 这也许是最容易实现的,但是当然有一些冗余。

  • 您可以将types存储为string属性,而不是将types存储为string属性,而是可以定义具有属性nameorder以及从ClothType的关系type另一个实体Type 在这种情况下,您可以按键pathtype.ordersorting。