ドキュメントが話していることは、フェッチを使用して、いくつかの属性に基づいて一連の管理対象オブジェクトを見つけてから、関係をたどってすべての関連オブジェクトを見つけることです。これは、リレーショナル データベースでデータを検索する方法とは大きく異なります。リレーションシップはオブジェクト グラフの構築時にハードコーディングされるため、それらのウォークはフェッチに比べて非常に高速であり、任意のリレーションシップをモデル化できます。
取得したプロパティを使用して、歩いて移動できる管理対象オブジェクトを見つけることはほとんどありませんでした。フェッチされたプロパティは、別の永続ストア ファイルに格納されているオブジェクトなど、移動できないオブジェクトを見つけるために使用されます。
関係をたどるには、キーパスを使用します。たとえば、モデル内の特定の会社のすべての従業員を検索するには、キー パスを使用teams.employees
し、特定の会社オブジェクトから開始します。開発者を見つけるには、次のような値Role
を保持する属性へのパスをたどります。developer
team.employees.role.roleType
特定のケースで、すべての開発者を含むテーブルが必要な場合は、フェッチをCompany
エンティティではなくエンティティに設定しEmployee
ます。たとえば、キーパスで述語を使用しますrole.roleType== developer
。特定の会社のすべての開発者が必要な場合は、次のような述語を使用します: `role.roleType== developer AND team.company.name == aCompanyName.
ただし、次のようにモデルを調整することをお勧めします。
Company<-->>Team<-->>Employee<<-->Role
これでRole
、同じ役割を多くの従業員に割り当てることができるエンティティができました。Role
これで、単純なキーパスを使用してエンティティを取得できるroleType== developer
ようになり、1 つのオブジェクトが返されます。employees
の関係を歩くと、Role
すべての開発者の従業員が得られます。
Core Data で覚えておくべき重要なことは、エンティティとその関係は、アプリが扱う現実世界のオブジェクト、イベント、および条件をシミュレートすることを目的としていることです。現実世界のものとそれらの間の関係をできるだけ正確に表現するようにデータ モデルを設定する必要があります。たとえば、現実の世界でdeveloper
は、 は 1 つの役割にすぎないため、オブジェクト グラフでは 1 つのオブジェクトだけで表す必要があります。現実の世界では、多くの従業員が開発者の役割を果たすことができるため、 と のEmployees
関係Roles
はEmployee<<-->Role
.
モデルが現実をより厳密にシミュレートすればするほど、アプリはあらゆる点で簡単に記述できるようになります。