xcdatamodelの複数のバージョンは、複数のxcmappingmodelファイルが必要なことを意味しますか?

私は複数のバージョンの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?)

ありがとう!

2

3 答え

Core Data requires that you create a mapping model to go from the current version of the data store to the latest version of the data store. This means that you will need to make one that goes from v1 -> v2 and v2 -> v3 and v1 -> v3.

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

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

     

適切なマッピングモデルを作成して   この段階は成功するでしょう。

As discussed in this Apple Document Core Data Mapping

4
追加された

You could implement progressive data migration. Look for progressivelyMigrateURL in here http://media.pragprog.com/titles/mzcd/code/ProgressiveMigration/AppDelegate.m

1
追加された

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

1
追加された