そのまま動作するドキュメントベースの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つはドキュメント用)が望ましいですか(直感的には、これは必要ではなく、おそらく正しいアプローチではないと言われています)?
助言がありますか?