0

私は Core Data の設計に問題があります。私はそれが初めてで、まだ Apple ガイドを勉強しています。

「BOX」(属性: name、color、orderingValue) と「CD」(属性のみ: name) の 2 つのエンティティがあります。これは多対多の関係です。

私の架空の机の上には、たくさんの BOX を置くことができます。

BOXには多数のCDを収納できます。同じ CD のコピーをデスク上の異なる BOX に保管できます。

机の上で交換できるように、orderingValue 属性を使用して BOX を並べ替えます。

問題はCDです。

BOXごとにCDの順番を入れ替えられるようにしたいです。BOX の場合のように、CD エンティティに順序値属性を使用することはできません。これを「5」に設定すると、その CD は各 BOX の 5 番目の場所に配置され、これは私が望むものではないためです。

Ordered リレーションシップを使用することを考えましたが、サポートしたい iCloud とはまだ互換性がないため、このオプションを破棄しました。

標準的なデータベースでは、BOX.Id、CD.Id、orderingValue を含む 3 番目のテーブルを作成し、それを JOIN で並べ替えに使用します。

順序付けられた関係を使用せずに CoreData でこのシナリオを処理するための最良のオプションは何ですか?

ありがとう

ニコラ

更新: codeghost のアドバイスに従いました。問題なく動作します。

4

1 に答える 1

2

コードゴーストのアドバイスに従いました:

1) "LinkedCD" という名前の 3 つ目のエンティティを作成しました。属性は次の 1 つだけです。

2) エンティティ「Box」から「LinkedCD」への 1 対多の関係を作成しました。

3) エンティティ "Cd" から "LinkedCD" への 1 対多の関係を作成しました。

これで、ボックスごとに CD を個別に並べ替えることができます。

1 つの BOX に CD を追加するとき、新しい LinkedCD エンティティを CoreData に挿入し、CD が BOX UITableView 内で移動されるたびに更新する開始順序値を計算します。UITableView がロードされたら、LinkedCD.orderingValue でソートされたすべての LinkedCD.Cd.name を入力します。

すべてが問題なく動作します。

ニコラ

于 2013-01-24T20:46:39.940 に答える