0

CoreDataの関係は私を混乱させます。読んだり読んだりしましたが、わかりません。普段読んでいるときにイライラするのは仕方がないと思います。私は本当に簡単なことをしたいです:

と呼ばれるエンティティとPicturesと呼ばれるエンティティがありUserます。ユーザーが写真で他の人を好きになり、タグを付けることができるようにしたいので、各Pictureエンティティには2つの関係があります。

画像エンティティ:

UsersWhoLikedThePicture(to-many):

Destination: User 
Inverse: Picture

UsersWhoAreTaggedInThePicture(to-many):

Destination: User
Inverse: Picture

しかし、これは使用中に非常に多くの混乱を引き起こしているので、私は説明することさえできません。一貫性がありません。誰かが写真を気に入った場合、タグ付けされたユーザーとして削除され、1つの写真が好きな場合は、他のすべての写真からあなたのいいねが削除されます。ああ、それはそのような混乱です..私の構造は大丈夫に見えますか?これをどのようにモデル化しますか?

4

2 に答える 2

3

Matthias Bauchの答えに加えて、私はあなたに関係を理解するためのいくつかのヒントを与えることができます。

まず、コアデータを扱うときは、オブジェクトの観点から考える必要があります。この魅力によって、モデルをグラフとして考えることができます。ノードはモデルで作成したエンティティであり、関係はそれらのエンティティ間のリンクです。

さて、関係については、1対1、1対多、多対多など、さまざまなタイプが考えられます。関係のタイプに基づいて、オブジェクトグラフにさまざまなリンクを作成できます。たとえば、aUserがと多対多の関係にPictureある場合、(タイプの)オブジェクトの各インスタンスが異なるsNSManagedObjectへのリンクを持っていることを意味します。ソース、s、宛先として機能します。PictureUserPicture

逆の関係は、グラフの一貫性を維持するためにCoreDataによって使用されます。特に、削除ルールを扱うときに役立ちます。

各関係には、削除ルールが関連付けられています。カスケードとは、オブジェクトを削除すると、たとえばUser、Core DataがPictureそれにリンクされているオブジェクト(s)を削除することを意味します。がリンクされている場合、拒否は削除を許可しません。Nullifyは、aからaへのリンクが切断されることを意味します。オブジェクトが削除されるという意味ではありません。オブジェクトグラフに関しては、これらのオブジェクト間のリンクがもうないことを意味します。アクションなしとは、ソースが削除され、宛先が常に存在し、存在しないオブジェクトを引き続き指していることを意味します。したがって、Nullifyとは異なりUserPicturePictureUser、そのリンクを手動で解除する必要があります。そうでない場合は、グラフに不整合が生じる可能性があります。このタイプの関係は避けてください。

他のことを知りたい場合は、私に知らせてください。

編集

詳細については、CoreDataプログラミングガイドの関係のセクションを参照してください。

于 2012-06-18T20:36:01.093 に答える
2

これが可能かどうかはわかりませんが、2つの関係に同じ逆ターゲットを使用したようです。そうしないでください。

正しい方法は次のようになります。

ここに画像の説明を入力してください

于 2012-06-18T17:35:29.767 に答える