1

現在のアプリケーションをアップグレードして、特殊なサブエンティティを持つ抽象的な親エンティティを使用しようとしています。カスタム NSEntityMigrationPolicy を作成し、マッピング モデルでカスタム ポリシーをクラスの名前に設定しました。

このように永続ストアを初期化していますが、これはかなり標準的なはずです。

NSError *error=nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                    [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                     nil];

if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
    NSLog(@"Error adding persistent store : %@",[error description]);
    NSAssert(error==nil,[error localizedDescription]);
}    

アプリを実行すると、次のエラーが表示されます。

キャッチされない例外 'NSInternalInconsistencyException' が原因でアプリを終了しています。理由: '操作を完了できませんでした。(ココア エラー 134140)」

[error userInfo] に「reason=Can't find mapping model for migration」が含まれています

データ モデルのバージョン 1 が開くことを確認しました。NSInferMappingModelAutomaticallyOption を設定すると移行が行われますが、エンティティは正しく移行されません (期待どおり)。

マッピング モデル (cdm) がアプリケーション バンドルに含まれていることを確認しましたが、なぜか見つからないのです。また、カスタム移行ポリシーにブレークポイントと NSLog() ステートメントを設定しましたが、NSInferMappingModelAutomaticallyOption の有無にかかわらず、どれも実行されません

マッピングモデルが見つからない理由についてのヒントはありますか?

4

2 に答える 2

0

私は上記の問題を解決したようですが、私が何をしたのかわかりません。

移行を機能させるために4日間試行した後、私はついに諦め、デザインを傷つけ、最初からやり直しました。プロセスのどこかで、gitのマスターブランチを以前のブランチにリセットして詳細を確認しましたが、誤ってデバッガーを起動しました。驚いたことに、移行は正常に実行され、すべてが機能しました。

私の推測では、XCodeには古い移行がいくつかあり、ビルドのクリーンアップ中に削除できませんでした(ビルドディレクトリを手動で削除したにもかかわらず)

于 2011-03-09T23:06:52.950 に答える