5

そのまま動作するドキュメントベースのCoreDataアプリケーションがあります。アイテムのライブラリを保持するためのグローバル永続ストアのサポートを追加したいと思います。

関連するドキュメントのほとんどを読み、管理対象オブジェクトモデルで構成を使用する必要があることを理解しています。「DocumentConfiguration」と「LibraryConfiguration」の2つの構成を定義しました。ドキュメント構成のエンティティはドキュメント構成のみにあり、ライブラリ構成のエンティティはライブラリ構成のみにあります。つまり、重複はありません。

その後、ドキュメントには「コーディネーターを作成するときにこのモデルを使用する」と記載されています。ただし、デフォルトのNSPersistentDocumentコーディネーターを使用しているため、実際には独自の永続ストアコーディネーターを作成しません。

最善の方法についてのいくつかの質問と、私が持っている可能性のある誤解を解消するのに役立ちます。

A. NSPersistentDocumentでNSPersistentStoreCoordinatorを取得してから、次の行に沿って新しい永続ストアを追加しますか?

NSPersistentStoreCoordinator * coordinator = [[myDocument managedObjectContext] persistentStoreCoordinator];
[coordinator addPersistentStoreWithType:NSXMLStoreType 
    configuration:@"LibraryConfiguration" 
    URL:url 
    options:nil 
    error:&error];

NSPersistentDocumentによって提供されるデフォルトを使用しているため、NSPersistentDocumentの永続ストアコーディネーターに他の構成定義( "DocumentConfiguration")を提供していないため、これが問題になる可能性があると考えています。ドキュメントを保存するときが来たら、おそらくnilを使用すると思います。もしそうなら、これは問題になるでしょうか?つまり、コーディネーターは、すべての永続ストア(この場合は2つ)に同じ構成が定義されていない場合、特定の構成定義でエンティティを保存する永続ストアをどのように知るのでしょうか?NSPersistentDocumentの永続ストアを作成/保存する前に、その構成を(「DocumentConfiguration」に)設定できますか?NSPersistentDocumentドキュメントから:

新しいドキュメントを保存すると、選択したURLでデフォルトタイプのストアが追加され、コンテキストでsave:が呼び出されます。既存のドキュメントの場合、保存はコンテキストでsave:を呼び出すだけです。

B.独自のNSPersistentStoreCoordinatorインスタンスとNSManagedObjectContextインスタンスを作成し、構成が定義された2つの永続ストアを追加してから、NSPersistentDocumentにこれらのNSPersistentStoreCoordinatorインスタンスとNSManagedObjectContextインスタンスを使用させ、古いインスタンスを解放する方がよいでしょうか。もしそうなら、addPersistentStoreWithType:...メソッドのNSPersistentDocumentのURLをどのように指定しますか?このURLは、無題のドキュメントが保存された後にのみ認識されるようです。(これをテストすると、ドキュメントが初めて保存されるまで、(永続ストアコーディネーターのメソッドpersistentStoresを介して)一時的な永続ストアは存在しないようです)。

C.または、NSPersistentDocumentをそのままにして、永続ライブラリストアと管理ライブラリオブジェクトモデル専用に使用する独自のNSPersistentStoreCoordinatorインスタンスを作成する方がよいでしょうか。ドキュメントには、NSPersistentStoreCoordinatorの複数のインスタンスをマルチスレッドのCore Dataアプリケーションで使用する必要があると記載されていますが、マルチスレッドのCoreDataのサポートは必要ありません。NSPersistentStoreCoordinatorの2つのインスタンス(1つはライブラリ用、もう1つはドキュメント用)が望ましいですか(直感的には、これは必要ではなく、おそらく正しいアプローチではないと言われています)?

助言がありますか?

4

2 に答える 2

1

私が使用した、うまく機能するソリューションは、上記のC)に基づいています。NSPersistentDocumentとその永続ストアコーディネーターをそのままにして、代わりに、永続ライブラリストア(グローバルストア)専用に使用する独自のNSPersistentStoreCoordinatorインスタンスを作成します。

後でこの永続的なストアコーディネーターに複数のストアを関連付けたい場合に備えて、ストアの構成をカスタム値に設定できます(「LibraryConfiguration」など)。ライブラリストアは、NSPersistentDocumentの永続ストアコーディネーターとは異なる永続ストアコーディネーターによって管理されるため、NSPersistentDocumentの永続ストアの構成を指定する必要はありません。

于 2010-12-14T09:09:58.437 に答える
0

構成ごとに個別の永続ストアを作成する必要があります。これが、同じデータモデル内のさまざまなエンティティを個別の永続ファイルに保存できるようにするための構成です。

ここでよくある間違いは、永続ストアコーディネーターが任意の数の永続ストアを持つことができることを忘れていることです。Appleの定型文を複製して、名前や場所が異なり、構成名がそれぞれ異なる2つの永続ストアを作成するだけです。次に、両方を永続ストアコーディネーターに追加します。

そして、これで完了です。各構成のエンティティインスタンスは、適切なストアに配置されます。

于 2010-11-18T18:27:58.447 に答える