対多関係に逆がない場合、コア データに問題があります。関連するプロパティに加えられた変更は保持されません。これは、グーグルで見つけることができるので、私たちの多くが直面している問題です。
これは、明らかな答えや逆の関係を追加する以外に、永続性を達成するためのトリック/回避策を見つけた人がいるかどうかを尋ねることです.
背景:
- ドキュメントで一方向の関係が推奨されていなくても、禁止されているわけではありません。ドキュメントは、逆がない場合に発生する責任のみを主張しています。
- 逆を必要としない理由は、core-data doc に概説されています。1 つのエンティティに多数のアイテムがリンクされている場合、アイテムが追加されるたびに、逆の関係により大きな NSSet が読み込まれます。メモリを消費しています。理由もなく許容量を超えている可能性があります。
例
従業員/部門の典型的なパラダイムでは、複数の部門に所属できる膨大な数の従業員がいる場合、従業員から部門への対多関係が必要です。従業員が部門にリンクされるたびに、(非常に) 大きい NSSet をロード、更新、および保存する必要があるため、逆は必要ありません。さらに、部門エンティティが削除されない場合、グラフの整合性を維持するのは簡単です。
これがコアデータの機能であり、逆の関係が必須であるという返信はしないでください。これは明記されておらず、機能というよりはバグのようなものです。バグ レポートを投稿しても、現在展開されているシステムのポイントは解決されません。
編集: Join エンティティ ソリューション この編集は、以下の Dan Shelly の回答提案をより明確にし、議論するためのものです。
まず、最初に返信するために、私は多対多ではなく、真の一方向対多を目指しています。リンクされたページとまったく同じページには、引用したものより少し下にこのテキストがあります。
一方向の関係
双方向の関係をモデル化することは厳密には必要ではありません。場合によっては、そうしない方が便利な場合があります。たとえば、対多リレーションシップに非常に多数の宛先オブジェクトがあり、リレーションシップをトラバースする可能性がほとんどない場合です (リレーションシップの宛先にある多数のオブジェクト)。ただし、双方向の関係をモデル化しないと、オブジェクト グラフの一貫性を確保し、変更を追跡し、元に戻す管理を行うために、多くの責任が課せられます。
つまり、結合エンティティを追加するという提案されたソリューションは、コアデータに自動的に生成および更新させるソリューションがない場合の方法です。
IMO、そして私のユースケースでは、結合エンティティは部門との関係を持つ必要さえありません。この一対一は役に立たず、関連する部門情報を保持する結合エンティティのプロパティ (objectID やそれに到達するための他のインデックス付きプロパティなど) に置き換えることができます。
例:
DepartmentEmployee:
プロパティ: Dept_ix (整数)
関係: 従業員 (to-one、nullify)