0

アプリの Core Data モデルを変更するたびに、次の起動時に回復不能なエラーが生成されます:「ストアを開くために使用されるモデルは、ストアを作成するために使用されるモデルと互換性がありません」。

これを回避する唯一の信頼できる方法は、アプリを手動で削除して Xcode に再インストールさせるか、他の手法を使用してコア データ ストアの .sqlite ストア ファイルを手動で消去することです。これは明らかに、ユーザーへの出荷には適していません。

NSPersistentStoreCoordinator を初期化するための Apple のデフォルトの App Delegate テンプレートには、次のコメントが含まれています。

 __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
    /*
     TODO: Replace this implementation with code to handle the error appropriately.

     ...

     If you encounter schema incompatibility errors during development, you can reduce their frequency by:
     * Simply deleting the existing store:
     [[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil]

     * Performing automatic lightweight migration by passing the following dictionary as the options parameter: 
     [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

     */

ただし、「エラーを適切に処理する」方法に関するサンプルや指示は見つかりませんでした。

この場合、単純にデータベースを吹き飛ばして、アプリにオンライン データから再生成させていただければ幸いです。これは、データベースを手動で吹き飛ばすときに行うことです。しかし、このエラー状態に応じて自動的にそれを行うにはどうすればよいでしょうか?

ベストプラクティスを説明する良いサンプルはありますか?

4

1 に答える 1

1

最適な方法は、軽量移行を使用することです。Apple のドキュメントを参照してください: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmLightweightMigration.html

新しいアプリ バージョンでモデルを変更する必要がある場合は、新しいモデルを作成します。これは Xcode で行います。現在のモデルを選択し、メニューの [エディタ]/[モデル バージョンの追加...] から選択するだけです。これがないと、自動移行は機能しません。

于 2012-05-06T22:28:00.053 に答える