2

複数のバージョンの xcdatamodel ファイルがあります。

app1.0.xcdatamodel
app1.1.xcdatamodel
app1.2.xcdatamodel (current)

これは、すべてのアップグレード シナリオをカバーするために xcmappingmodel ファイルの複数の組み合わせが必要ということですか?

app1.0_to_app1.1.xcmappingmodel (had this already)
app1.1_to_app1.2.xcmappingmodel (is it iterative?)
app1.0_to_app1.2.xcmappingmodel (too much?)

ありがとう!

4

3 に答える 3

4

Core Data では、現在のバージョンのデータ ストアから最新バージョンのデータ ストアに移行するためのマッピング モデルを作成する必要があります。これは、v1 -> v2 および v2 -> v3 および v1 -> v3 の順に作成する必要があることを意味します。

コア データのバージョン管理と移行ガイドより

既存のストアの管理対象オブジェクト モデルから、永続ストア コーディネーターによって使用されているモデルにマップするマッピング モデルを見つけようとします。Core Data はアプリケーションのリソースを検索して、利用可能なマッピング モデルとテストを順番に探します。適切なマッピングが見つからない場合、Core Data は NO と適切なエラーを返します。

このフェーズを成功させるには、適切なマッピング モデルを作成しておく必要があることに注意してください。

この Apple Document Core Data Mappingで説明されているように

于 2012-02-06T21:06:31.360 に答える
1

プログレッシブ データ移行を実装できます。ここで 、 progressiveMigrateURLを探してください http://media.pragprog.com/titles/mzcd/code/ProgressiveMigration/AppDelegate.m

于 2012-10-31T10:35:08.387 に答える
-1

プログレッシブMigrateURLは素晴らしいサンプルですが、実際には必要ないと思います。アプリケーションを開発している限り、ドキュメントのバージョンが表示されるため、サポートされているデータ モデルのバージョン数から 1 を引いた数のマッピング モデルが必要になるたびに、それ以上ではありません (たとえば、1.1 バージョンは最新バージョンではないため、app1.0_to_app1.1.xcmappingmodel は必要ありません)。新しいバージョンを作成するたびに、所有しているすべてのマッピング モデルのターゲット モデルを修正し、必要に応じてもう 1 つ追加するだけで済みますが、新しいバージョンを生成して古いモデルを削除する必要があるかもしれません。実際のところ、1 つの段階での移行 (プログレッシブに比べてより多くのマッピング モデルを作成する必要はありません) は、お気づきかもしれませんが、実行時にはるかに高速です。あなたもしないで 些細なケースのマッピング モデルを作成する必要がなく、軽量移行を使用する (具体的な状況で実行時に生成できないマッピング モデルが必要な場合は、代わりにデフォルトの移行プロセスを使用します (もちろん、アプリ バンドルに含める必要があります)) またはinferredMappingModelForSourceModel:destinationModel:error: NSMappingModel クラスのメソッドを使用して実行時に作成されたマッピング モデルを使用して移行し、必要に応じてコードでカスタマイズします (この場合、migrateStoreFromURL を呼び出して移行を手動でトリガーする必要があります。 type:options:withMappingModel:toDestinationURL:destinationType:destinationOptions:error: 私が理解している限り、NSMigrationManager インスタンスのメソッド)。幸運を!

于 2013-01-11T06:51:17.003 に答える