1

Core Data テンプレートを使用して作成されていないアプリに Core Data を統合しようとしています。私はこれに問題があり、おそらく非常に簡単な答えがあります。ただし、この主題に関するほとんどのチュートリアルはテンプレートの使用を対象としているため、困惑しています。

Core Data をチェックしてシンプルなアプリを作成し、生成されたコードを既存のアプリにコピーするという推奨事項に従いました。ただし、AppDelegate の外部で NSManagedObjectContext にアクセスする方法がわかりません。私はいくつかのビュー コントローラーを持っていますが、管理対象オブジェクト コンテキストにアクセスする必要があるのはその中にあります。

アプリにコピーした生成コードは AppDelegate に配置され、.pch ファイル内の CoreData への参照も配置されました。何か不足していますか?管理対象オブジェクトのコンテキストにアクセスするにはどうすればよいですか?

ありがとう!Ⅴ

4

2 に答える 2

5

数週間前にあなたが直面しているのと同じ問題に遭遇しました。私の調査に基づいて、アクセスしたいクラスに AppDelegate に ManagedObjectContext を渡すことで、厳格さを回避することがベスト プラクティスであることがわかりました。これは次のように実行できます。

managedObjectContext にアクセスするクラスの .h ファイルにプロパティを作成します。

@property (nonatomic, strong) NSManagedObjectContext  *managedObjectContext;

次に合成します。

@synthesize managedObjectContext;

didFinishLaunchingWithOptions:AppDelegate のメソッド内で、managedObjectContext をインスタンス変数に割り当てます。

MyClass.managedObjectContext = self.managedObjectContext;

これを達成するためのより良い方法があるかもしれませんが、私にとってはうまくいきました。また、私のクラス/ビュー コントローラーは AppDelegate について何も知る必要はありません。

編集:以下のコメントに基づいてセッターメソッドを削除しました。

于 2013-08-10T17:44:22.023 に答える
4

アプリでオブジェクト コンテキストを共有するには、いくつかの方法があります。異なるスレッドでコンテキストを使用しないようにする必要があることに注意してください。バックグラウンド スレッドとフォアグラウンド スレッドの両方で Core Data を使用する場合は、複雑な処理を追加する必要があります。

どのオプションを使用するかはあなた次第です:

  • 私は通常、コア データ オブジェクト (永続ストア コーディネーター、マネージド オブジェクト モデル、フォアグラウンドおよびバックグラウンド スレッドのコンテキスト) をシングルトン オブジェクトに移動します。これにより、それを必要とするすべてのクラスが、上向きの依存関係をあまり追加せずにオブジェクトを取得できます。
  • 依存性注入を使用して、アプリ デリゲートで作成したビュー コントローラーにコンテキストを渡し、それらのビュー コントローラーからそれらを必要とする他のオブジェクトに渡すことができます。
  • アプリのデリゲートのヘッダーで Core Data ゲッターを公開できます。次に、クラスでアプリ デリゲートを取得し、アプリ デリゲート[[UIApplication sharedApplication] delegate]から CD オブジェクトを直接取得できます (このアプローチは好きではありませんが、おそらくコードの変更はほとんどありません)。
于 2013-08-10T17:11:49.053 に答える