0

そこで、Cocoaでドキュメントベースのアプリケーションを構築し、NSManagedObjectContextを理解しようとしています。Appleの「CoreDataBasics」を読みましたが、頭を悩ませることはできません。私のアプリケーションでは、カスタムCoreDataUtilityクラスを作成して、すべてのクラスが次のコード行を介してコンテキストを取得できるようにしました。

MyCoreDataUtility *coreData = [MyCoreDataUtility sharedCoreDataUtility];
NSManagedObjectContext *context = [coreData context];

このアイデアは「ココアは私のガールフレンド」というサイトから得ました。混乱するのは、アプリケーションを実行して新しいウィンドウを作成するときです(ファイル所有者クラスはNSPersistentDocumentのサブクラスです)。新しいウィンドウのコンテキストに変更を加えると、ビューには古いウィンドウの変更が反映されます。だけでなく、新しいもの。これに基づいて、両方のウィンドウが何らかの方法で同じコンテキストまたは少なくとも同じデータを参照していると想定しています。

だから私の質問は:

  1. 新しいウィンドウを作成するたびに新しいコンテキストが作成されると思いますが、これは正しいですか?
  2. 新しいコンテキストが作成され、それらが異なる場合(2つのコンテキストのメモリアドレスを実際に出力し、アドレスが異なる場合)、これは永続ストアコーディネーターまたは永続オブジェクトストアと関係があります(これらの概念は両方とも私の心の中で曖昧)?
  3. すべてのドキュメントが同じコンテキストを参照している場合、ドキュメントが作成されるたびに新しいコンテキストを作成するのは私の責任ですか?

皆さんありがとう!

4

1 に答える 1

0

新しいウィンドウを作成するたびに新しいコンテキストが作成されると思いますが、これは正しいですか?

いいえ、はい。新しいウィンドウを作成しても新しいコンテキストは作成されませんが、「新しいウィンドウ」として表示されるのは、実際には「新しいドキュメントを作成する」というアクションであると思います。CoreDateを使用するドキュメントベースのアプリでは、すべてのドキュメントに新しいコンテキストを作成する永続的なストアが存在する可能性があります。

それはあなたの2番目の質問への答えでもあります。ストアコーディネーターは、アプリケーションのすべてのドキュメントを管理する中心的なポイントにすぎません。開く、保存、すべての副作用など、メニューに関連するいくつかのアクションを処理します。

すべてのドキュメントが同じコンテキストを参照している場合、ドキュメントが作成されるたびに新しいコンテキストを作成するのは私の責任ですか?

それは不可能です。1つのコンテキストは1つのファイル(または「ストア」)にのみ関連付けることができるため、すべてのドキュメントには「少なくとも」1つのコンテキストが必要です。CoreDataおよびマルチドキュメントベースのアプリのテンプレートを使用している場合は、新しいコンテキストの作成について心配する必要はありません。前にも言ったように、店のコーディネーターがそれを引き受けます。ただし、CoreDataについて詳しく学ぶと、特にマルチスレッドを実行する場合、コンテキストはスレッドをまたがることができないため、複数のコンテキストを作成する必要があります。

ココアからのリンクを提供していただけますか?そのコードを取得した私のガールフレンドです。シングルトンにコンテキストを保存する必要があるようですが、ある関数に別のドキュメントのコンテキストを与えることは非常に簡単なので、ドキュメントベースのアプリでは通常それは悪い考えです。アプリケーションには、コンテキストが渡される場所で適切なフローが必要です。ただし、アプリケーションがドキュメントベースでない場合は、常にシングルトンを使用します。

于 2012-08-09T17:58:53.433 に答える