0

私が人々のグループを持っているとしましょう。各人はコンパニオンを持つことができます (ほとんどの場合、コンパニオンがいます)。この交際は、他の人々の友情を担当しています。人は、1 つの交際のみによって友情を深めることができます。

例:私たちは持っていますJohn, Tom, Mary, Paul, Peter, Frank and Wil

ピーターとトムの友情 ポールとジョンなど:

Peter - Tom         Paul - Mary         Wil - John            Frank -
 |_Paul              |_Wil         
 |_John              |_Peter
                     |_Tom

MaryそしてFrank、誰とも友好的ではありません。Frank仲間はいません。

次の関係を設定しました。

Person
Relationship       Destination    Inverse            Type       Delete Rule
companion          Person         companion          To One     Nullify
friendshippedBy    Person         friendships        To Many    Nullify       Count 2 Maximum
friendships        Person         friendshippedBy    To Many    Nullify

誰がピーターの仲間で、誰がピーターと友情を築いているか、誰がピーターと友情を結んでいるか、誰と友情を結んでいないか、誰とも友情を結んでいないか、誰とも友情を結んでいないかを見つけることができます。これで問題ありません。必要なものはすべて揃っていますが、データの整合性を自分で管理する必要があることを除けば、ピーターがトムの仲間である限り、ピーターとトムの友情は同じであるということを確認する必要があります (friendships関係両方とも同じである必要があります)。これらの関係を次のように設定する必要があります。

peter.friendships = [NSSet setWithArray:@[paul, john]];
tom.friendships = peter.friendships; // need to preserve it as long as they're companions

friendships交友関係にある人の関係が変わるたびに最後の行を書く必要は避けたい. カテゴリに便利なメソッドを記述できると考えています (.friendships =直接ではなく、そのメソッドを呼び出すかsetFriendships、オーバーライドする必要があることを確認する必要があります)。この関係自体。

Core Data にこの関係を自動的に保持させる方法はありますか?

4

2 に答える 2

1

すべての「仲間」の「友情」を複製する代わりに、仲間と共通の友人の両方を格納する中間エンティティ「接続」を導入できます。

ここに画像の説明を入力

(そして、「コンパニオン」関係の最大値を 2 に設定します)。

それで

  • person.companionConnection.friendshipsは、与えられた の友達ですperson
  • person.companionConnection.companionsperson与えられたものとその仲間を含むセットであり、
  • 誰とも友達になっていない人は、 を持つ人person.friendshipConnection = nilです。
于 2013-08-03T08:19:50.270 に答える
0

いいえ、「自動複製」機能はありません。オーバーライドのオプションを使用しますsetFriendships。KVO を使用して更新をトリガーすることもできます。もう 1 つの可能性は、関係を複製しないことです。代わりに、2 人の関係の結合を作成し、それを返すメソッドを追加します (関係の内容を何に使用するかによって異なります)。

于 2013-08-01T06:59:26.633 に答える