1

あるオブジェクトを別のオブジェクトに複数回関連付ける必要がある場合に、解決しようとしている問題があります。現在、私は「シーケンス」と「ポーズ」の間に1対多の関係があります。シーケンスを作成するときは、一度にバッチをシーケンスに追加します。コードは次のようになります。

- (void)doneAddingItems {
NSMutableOrderedSet *saveSet = [NSMutableOrderedSet orderedSetWithOrderedSet:self.sequence.poses];
[saveSet addObjectsFromArray:self.posesToAdd];
self.sequence.poses = [NSOrderedSet orderedSetWithOrderedSet:saveSet];
[self.managedObjectContext save:nil];
[self.navigationController dismissViewControllerAnimated:YES completion:nil];
}

これは、一意の「ポーズ」のリストには最適ですが、同じオブジェクトとの関係を2回持つことはできないため、次のようなシーケンスを作成することはできません。

PoseA -> PoseB -> PoseC -> PoseA -> PoseD

他の人はこれをどのように扱っていますか?シーケンス内の選択されたポーズの存在をチェックする動的エンティティを作成することを考えていました。存在する場合は、そのポーズを複製して、「2回参照」できるようにします。どちらも同じ情報が含まれますが、インデックスは異なります。これで問題が解決すると思います。動的エンティティとコードを追加するだけで、重複を検証し、シーケンスが削除されたときにエンティティをクリーンアップできます。

誰かもっと良いアイデアがありますか?

4

1 に答える 1

2

Index型の新しいNSManagedObjectクラスで問題を解決できると思います。シーケンスとポーズの間に関係を持たせる代わりに、シーケンスとインデックスの間に1:多くの関係を持ち、次にインデックスとポーズの間に多くの1の関係を持ちます。「order」属性で順序付けられたインデックスを取得することにより、ポーズの完全なシーケンスを回復できます。各インデックスは特定のポーズを参照しますが、各ポーズは複数のインデックスで使用できます。インデックスは、「order」属性と関係だけを持つ非常に軽量なオブジェクトです。

副作用として、Indexの「order」値がその情報をキャプチャするため、順序セットを使用する必要がなくなります。

(振り付けアプリ?写真?)

于 2012-11-15T03:37:39.523 に答える