AUIDocument
は、物理ファイル ラッパーの管理クラスです。AUIManagedDocument
は、CoreData スタックを提供するクラスのサブクラスです。
File Wrapperは、フォルダーまたはファイルの抽象化にすぎません。そのUIManagedDocument
フォルダーには、CoreData スタックが接続する SQLite データベースが含まれています。
文章の各段落に個別の Word ドキュメントを使用するのと同じように、日記エントリに個別のドキュメントを使用することはありません。
あなたのアプリは、Apple が「Shoebox アプリ」と呼んでいるものに似ているため、1 人のユーザーがデータの山を 1 つ持っており、それらを追加したり削除したりします。ドキュメント アーキテクチャを使用する必要はありません。ただし、これUIManagedDocument
により無料のスタックが提供されるため、役立つ場合があります。
このアプリを作成するのが私だったら、このアプローチを取るかもしれません。
公式鳥類の読み取り専用データベース。このデータベースは、初回起動時および更新が必要なときにダウンロードされます。かなり大きくなるので、これをバンドルに入れないでください。どの時点でもバックアップされません。
日記のエントリを保持する読み書き可能なデータベース。このデータベースは iCloud にバックアップされており、Bird データベースをアップグレードしても変更されません。
CoreData リレーションシップではなく GUID を使用して、2 つのデータベースを疎結合します。

たとえば、マガモの GUID はDUCK1234
. その GUID を日記エントリの属性 (例: birdGUID ) として書き込みます。マガモのダイアリー エントリをすべて見つけるには、ダイアリー データベースで "birdGUID == 'DUCK1234'" に対してクエリを実行します。
これを行う理由は、ユーザー データの損傷を心配することなく、公式の鳥データベースをアップグレードできるためです。より良い/安価なデータベース、または鳥の鳴き声を持つ別のデータベースを購入すると、それに対処するためにスキーマを調整できます。
編集
1 つのアプローチ (簡単なアプローチ) は、2 つのスタックでスタックを構築することです。NSPersistentStores
NSPersistentStoreCoordinator *myPersistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[NSManagedObjectModel mergedModelFromBundles:nil]];
NSDictionary *readonly_options = @{NSReadOnlyPersistentStoreOption:@YES};
[myPersistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:officialBirdStoreURL options:readonly_options error:&error];
NSDictionary *readwrite_opts = @{NSMigratePersistentStoresAutomaticallyOption:@YES,
NSInferMappingModelAutomaticallyOption:@YES};
[myPersistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:diaryStoreURL options:readwrite_opts error:&error];
NSManagedObjectContext *workingContext = [[NSManagedObjectContext alloc] initWithConcurrencyType: NSMainQueueConcurrencyType];
workingContext.persistentStoreCoordinator = myPersistentStoreCoordinator;
多くの優れた Core Data チュートリアルがあるため、これを完全に説明するつもりはありませんがNSReadOnlyPersistentStoreOption
、Bird データベースの設定に注意してください。
UIManagedDocument
スタックを十分に制御できないため、これには使用は含まれません。
要約すると、下から上へのスタック。
UIManagedDocument
- モデルコントローラー。File Wrapper のメカニズムを処理し、フリー スタックを提供します。必要ありません。マルチドキュメントアプリを簡単にするかもしれません(またはしないかもしれません).
NSManagedObjectModel
- Model 、コア データ モデルのスキーマ。
NSPersistentStore
- Model 、ディスク上の単一の SQLite データベースを表します。
NSPersistentStoreCoordinator
- 任意の数のコントローラーNSPersistentStore
NSManagedObjectContext
- メモ用紙のようなモデルワークスペース。使用して保存するか、使用して破棄します。
この段階では、 に縛られないでくださいUIManagedDocument
。その上に CoreData スタックを持つファイル システムのコントローラーです。箱から出してやりたいことはしません。
両方のデータベースをロードし、それらのデータを使用して UI を駆動する方法という実際の問題について心配してください。
後で本当に重要な場合は、UIManagedDocument ベースのアーキテクチャを移動できます。これが私のアプリなら、私は気にしません。