2011-12-15 13 views
3

私はかなり基本的な質問があります。 2つのエンティティの間にリレーションがある場合(entityOneにはentityTwoと多対多の関係があります) entityOneを取得すると自動的に関係を取得しますか?あるいは、それらもフェッチして対応するエンティティに割り当てる必要がありますか?CoreDataフェッチエンティティ

私はこれが実際にチャットで簡単な質問をしたほうがよいと思っていましたが、まだ必要な評判はありません。

私は自分の質問を投稿することができないので、あまりにも短いので、別の質問をします。

同じプロジェクトでは、エンティティをフェッチするrootViewControllerがあります。今私はイベントを追加したい場合、私は別のビューに、テキストフィールドなどとユーザーを送信する必要があります。私はこれを行うより効率的な方法を見つけることができなかったので、これらのviewControllersのそれぞれに対して配列 "eventArray"を作成しました。 私はrootViewControllerにNSMutableArray * eventsArrayがあり、addEventViewControllerにはaddEventViewController(addEventViewController.eventsArray = self.eventsArray)をプッシュする前にNSMutableArray * eventsArrayが設定されているとします。 これをより効率的に行うにはどうすればよいですか?私はこれが正しいことではないと確信しています。

+3

フォールティングパーツの@paulbailey答えを参照してください。それに沿って配列を渡すためには、私はポールに同意せず、正しいことをしていることを示唆します。あなたはポインタを長い間渡しているので、メモリの使用量は増えていません。あなたがそれをやり遂げたやり方によって、あなたのオブジェクト間のカップリングが緩やかになり、それが適切であり、適切なテストを行うことが可能になります。あなたが単にアプリケーションデリゲート(シングルトン)に配列を持っていれば、テストをより困難にし、オブジェクトの潜在的な再利用を減らすグローバル変数を基本的に持っています。 –

+0

ええ、私はappDelegateで変数を使用しませんでした。なぜなら、Paul HegartyはappDelegateを使うのは良い考えではないと言いました。私はそれを正しい方法でやってうれしい – lascort

+0

良い点、私は私の答えからその愚かさを編集します。 – paulbailey

答えて

3

あなたの最初の質問への答えは:

この状況は自動的にコアデータによって処理され、機構は「フォールト」と呼ばれています。アップルはsome helpful documentation on thisです。簡単に言えば、関連するオブジェクトはフェッチされませんが、アクセスしようとすると、コアデータは永続ストアから自動的に取り出します。

もちろん、関連するオブジェクトを1つずつフェッチする(たとえば、関連するオブジェクトについて何かをテーブルに表示するなど)、アプリケーションが遅くなることがあります。

setRelationshipKeyPathsForPrefetching:メソッドをNSFetchRequestで使用すると、これらのオブジェクトを先に取り出すことができます。これは、メモリ使用量とパフォーマンスのバランスをとることのすべての問題です。

フォールトはCore Dataの非常に重要な部分であり、使用方法と使用方法をよく理解していることを強くお勧めします。