0

私はこのテクノロジーに不慣れではありませんが、1つのことが私を悩ませています。それはコアデータについてです。私がこのようなdbモデルを持っていると仮定しましょう:

人<->家<->家の詳細

<->は双方向の関係を意味し、Personには多くの家があり、各家には詳細があります(たとえば、それが何であれ)。

そして今、コアデータで特定の人物に到達すると、この人物とすべての関係(客観的なアプローチの参照)を「家の詳細」まで取得します。

ここで、dbモデルがより複雑で、XCodeが双方向の関係を強制することを想像してください(警告によってのみですが、それでも)。

私の質問は、XCodeの権利(双方向)に従ってすべての関係があるかどうかを想定していますが、特定の人物を取得したいが、家と家の詳細への参照なしでクエリをフェッチする方法はありますか(上記の例から)。

私がこの質問をしている理由は、私が知る限り、それが不可能であるかどうかということです。もう1つの主な理由は、双方向の関係を持つ複雑なdbモデルを使用している場合、Personデータのみを受信したいのに、このすべてのデータ(必要なもの、すべての参照を含む)を取得するのに時間がかかることです。 dbモデルに対する他の関係(参照)。基本的には、個人データのみを要求する場合(例によると)、結果からすべての関係を削除するという考え方です。

注:これはスタックオーバーフローに関する私の最初の投稿なので、私を生きたまま食べないでください:)。しかし、私が求めていることが不可能な場合、正直なところ、開発者の観点から望むようにデータを管理できないことは大きな苦痛です。

この投稿がよくわからない場合は、お知らせください。説明します。

4

3 に答える 3

0

エンティティの特定のインスタンスを取得するときに、CoreDataが何をフェッチするかを正確に心配する必要はありません。CoreDataがメモリの問題を管理します。フェッチされたエンティティの単一の属性でさえ、"faults"コアデータが自動的に必要なときにこれらの詳細を取得する可能性があります。NSLogこれはステートメントで確認できます。管理対象オブジェクトの多くの詳細は、必要になるまで利用できません。

したがって、エンティティがあり、それぞれ50の家の詳細を持つ100の家を持つPerson1つのインスタンスをフェッチする場合、そのすべてのデータでメモリを詰まらせることはありません。person

それがコアデータの美しさです。

于 2012-05-31T21:11:01.813 に答える
0

コアデータはデフォルトでリレーションシップの遅延読み込みを行うため、personオブジェクトをフェッチする場合、リレーションシップは参照を開始したときにのみフェッチされます。

于 2012-05-31T21:13:29.817 に答える
0

悪いニュースは、双方向の関係がある場合、その関係は両端から維持されるため、あなたの場合、人を家に追加するか、家を人に追加することができ、どちらの側もそれを関係セットに含めることができます(多対多の関係)。これがCoreDataの仕組みです。

幸いなことに、CoreDataが情報を遅延的にフェッチする方法が原因で、それは実際には問題ではありません。したがって、関連するすべての家を取得せずに人を取得したい場合は、CoreDataが行います。リレーションシップの最後にオブジェクトを実際にロードしたい時点まで、オブジェクトはフォールトとして存在します。つまり、最小限のスケルトン参照です。

フェッチされたPersonオブジェクトの1つをNSLogします。関連する家が以前にフェッチされていない場合は、最小限の参照として出力されます。

于 2012-05-31T21:16:45.277 に答える