コア データの移行に問題があり、理解できない方法で失敗しています。
次のような古いバージョンのデータ モデルからの移行パスがあります。
- v1 - 初期モデル
- v2 - 軽量の移行が必要
- v3 - 軽量の移行が必要
- v4 - カスタム移行が必要
- v5 - 軽量移行
v1 - 現在からの移行を実行するための統合テストをまとめています。現在のストアを照会できる小さなヘルパーを作成し、モデルを指定して、適切なタイプの移行を実行します。これは多かれ少なかれうまくいきましたが、概念的に理解できないカスタム移行ステップでエラーが発生しました。
次の説明を持つNSMigrationManager::migrateStoreFromURLを使用しています。
指定されたソース URL のストアを宛先 URL のストアに移行し、マッピング モデルのすべてのマッピングを実行します。ソース URL にストアが存在する必要があります。移行先 URL にストアが存在しない場合は、ストアが作成されます (存在しない場合、移行は既存のストアに追加されます)。このメソッドを呼び出すと、移行元モデルと移行先モデル (およびマッピング モデル) で互換性チェックが実行されます。検証または移行中に発生した場合、このメソッドは NO を返します。
テスト ケースは v1 sqlite ストアにコピーされ、v3 に正常に自動移行され、カスタム移行で次のエラーで失敗します。
NSUnderlyingError: エラー Domain=NSCocoaErrorDomain Code=134100 「操作を完了できませんでした。(Cocoa エラー 134100。)」
UserInfo = 0x210d740 {メタデータ = { NSPersistenceFrameworkVersion = 419; NSStoreModelVersionHashes = {この投稿ではノイズになるハッシュがたくさんあります...}; NSStoreModelVersionHashesVersion = 3; NSStoreModelVersionIdentifiers = ( "" ); NSStoreType = SQLite; NSStoreUUID = "0D2C0907-5F60-4EED-A61B-E726EEB0DA68"; "_NSAutoVacuumLevel" = 2; }, reason=ストアを開くために使用されたモデルは、ストアを作成するために使用されたモデルと互換性がありません
要約すると、v3 まで自動移行されたソース ストアしかありません。宛先ストアがありません。NSMigrationManager に依存して宛先ストアを作成することを望んでいました。存在しないストアとのモデルの不一致が原因で移行が失敗するというのは、私には意味がありません。何か案は?
追加のコンテキストとして、デバッグ時に、すべてのパラメーターの適切なインスタンスをメソッドに渡していることを確認しました。移行元モデルと移行先モデルが読み込まれ、カスタム移行に使用されるマッピング モデルが、移行元モデルと移行先モデルでクエリを実行することによってテスト バンドルから読み込まれました (何か問題があると失敗するため、有望な結果です)。 sqliteストアは正しく見えます。