私はcore-dataを使用するココアアプリケーションを持っています。これは現在、管理対象オブジェクトモデルの4番目のバージョンです。
管理対象オブジェクトモデルには抽象エンティティが含まれていますが、これまでのところ、適切なマッピングモデルを作成し、addPersistentStoreWithType:configuration:options:errorを使用し、NSMigratePersistentStoresAutomaticallyOptionをYESに設定して永続ストアを作成することで、移行を機能させることができました。
NSDictionary *optionsDictionary = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption];
NSURL *url = [NSURL fileURLWithPath: [applicationSupportFolder stringByAppendingPathComponent: @"MyApp.xml"]];
NSError *error=nil;
[theCoordinator addPersistentStoreWithType:NSXMLStoreType configuration:nil URL:url options:optionsDictionary error:&error]
これは、モデルバージョン3から4に移行する場合に正常に機能します。これは、複数のエンティティに属性を追加することを伴う移行です。新しいモデルバージョン(バージョン5)を追加しようとすると、addPersistentStoreWithTypeを呼び出すとnilが返され、エラーは空のままになります。4から5への移行には、単一の属性の追加が含まれます。
私は問題のデバッグに苦労しており、次のすべてをチェックしました。
ソースデータベースは実際にはバージョン4であり、persistentStoreCoordinatorの管理対象オブジェクトモデルはバージョン5です。
4-> 5マッピングモデルとバージョン4および5の管理対象オブジェクトモデルは、ビルドしたアプリケーションのリソースフォルダーにあります。
さまざまなモデルのアップグレードパスを試しました。不思議なことに、初期バージョン3-> 5からのアップグレードは機能しますが、4->5からのアップグレードは失敗します。
属性が変更されているエンティティの移行用にカスタムエンティティ移行ポリシーを追加しようとしました...この場合、メソッドbeginEntityMapping:manager:error:をオーバーライドしました。興味深いことに、このメソッドは、移行が機能するとき(つまり、3から4、または3から5に移行するとき)に呼び出されますが、失敗した場合(4から5)には呼び出されません。
私はどこに進むべきかについてかなり途方に暮れています。この問題のデバッグに役立つアイデアをいただければ幸いです。