3

事前定義された値のリスト(ポンチョ、ジャケット、コート、ガウン、トップ、スーツなど)から入力される属性()を持つ()がありますNSEntityClothtypeNSString

の定義された順序に基づいてレコードが順序付けられるように、すべてのClothレコードをフェッチしたいと思いtypeます。つまり、ポンチョのすべてのレコードが一番上にあり、次にジャケット、次にコート、次にガウン、次にトップ、次にスーツなどです。

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

この順序は昇順または降順ではなく、カスタムです。Clothこの(定義された)順序で返されるようにレコードをフェッチするにはどうすればよいですか?

4

2 に答える 2

7

Core Dataフェッチ要求は、SQLiteデータベースに格納されている属性でのみソートできます(「 CoreDataプログラミングガイド」の「管理対象オブジェクトフェッチと述語のフェッチおよび記述子のソート」を参照)。

次のオプションがあります。

  • すべてのオブジェクトをフェッチし、後でカスタムの並べ替え記述子を使用して並べ替えます。ただし、フェッチされた結果コントローラーをテーブルビューに使用している場合、これは役に立ちません。

  • 追加の整数属性orderClothエンティティに格納し、それをソートキーとして使用します。これはおそらく実装が最も簡単な方法ですが、もちろんある程度の冗長性があります。

  • Typeタイプを文字列属性として格納する代わりに、プロパティnameと、、およびからorderの関係を持つ別のエンティティを定義できます。この場合、キーパスで並べ替えることができます。typeClothTypetype.order

于 2012-10-24T08:57:22.070 に答える
5

NSNumberカスタムオーダーを実装する唯一の方法は、オーダーを追跡するためにタイプの新しい属性を導入することです。

[カテゴリ文字列(ポンチョなど)の後にテキストが多いようです。そのため、実際には、最初の単語でグループ化されているだけで、すべてカスタム順序に従う必要のある一意の文字列が多数あります。]

このロジックを残りのデータから本当に分離したい場合は、ClothType属性nameを使用して新しいエンティティを作成し、エンティティとsortOrderの関係を築くことができますCloth

別のスキームは、ソート属性に、たとえば、すべての「プライマリ」カテゴリに対して10000を乗算し、同じカテゴリの後続のカテゴリごとに1を追加することです。

于 2012-10-24T12:29:18.583 に答える