回答:
これは非常に単純であることがわかりました。
私のAppDelegateでNSPersistentStoreCoordinatorをセットアップしました。これにいくつかのオプションを追加して、自動移行を処理するように指示する必要があります。
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
NSError *error;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
// Handle error
NSLog(@"Problem with PersistentStoreCoordinator: %@",error);
}
次に、xCodeで少しトリックを行う必要があります。
これは素晴らしく、私が望んだように単純に見えますが、モデルを変更するときは開発中に注意する必要があると思います-そうでない場合は、変更ごとに新しいバージョンを作成する必要があります。
変更したファイルをすべて保持し、更新を展開する準備ができたら、中間のファイルをすべて削除して、最も古い最新のモデルで展開することになると思います。
更新(2011年7月15日):
Appleで更新されたドキュメントがあることを指摘してくれた@ rockstarberlinに感謝します。
Xcode 4:管理対象オブジェクトモデルの現在のバージョンを設定する
更新:2013年8月19日、より良いリンク:
これは非常に役に立ちました。Appleのドキュメントは-いつものように-ものすごく不完全だった。これらの変更を行った後、最初に実行したときに「2つの異なるエンティティxxxを持つモデルをマージできません」というエラーが発生したため、クリーンビルドを実行することをお勧めします。クリーンビルドで修正されました。
Grouchalの答えは完璧です...しかし、ビルドを数回クリーンアップした後でも「2つの異なるエンティティxxxを使用してモデルをマージできない」場合は... managedObjectModelのロード方法に問題がある可能性があります。これを見てください...これは修正に役立ちました。
また、私がしたように、この投稿を偶然見つけた場合、「ストアを開くために使用されたモデルは、ストアを作成するために使用されたモデルと互換性がありません」というエラーが発生し、シミュレーターを使用してデバッグしていて、完全に置き換えたいと思っています。古いモデルがインストールされている場合は、シミュレーターアプリをリセットするか、アプリをシミュレーターから削除すると、おそらく同様に機能します。
ここの投稿を読むまで、これを試すことはありませんでした。その時点で、アプリをシミュレーターにインストールし、その後モデルを変更したため、前述のランタイムエラーが発生していることに気付きました。
Santthoshの回答をフォローアップするために、代わりにここにコードスニペットを投稿すると思いました。あなたはmanagedObjectModelを作成する必要がありますinitWithContentsOfURL:
mergedModelFromBundles:
そうしないとエラーが発生代わりにます。
2つの異なるエンティティXXXとXXXを持つモデルをマージすることはできません
モデルファイルの名前が「モデル」の場合、managedObjectModelを作成する方法は次のとおりです。
NSString *path = [[NSBundle mainBundle] pathForResource:@"Model" ofType:@"momd"];
NSURL *momURL = [NSURL fileURLWithPath:path];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];
このブログ投稿のクレジット。
別の問題が原因でこの投稿に遭遇しましたが、エラーは次のとおりでした。「ストアを開くために使用されたモデル構成は、ストアの作成に使用されたものと互換性がありません。」
ここに私の問題とその解決策がありました。私のモデルでは、設定を使用していました。エンティティの一部を1つのファイルに保存し、他のエンティティを別のファイルに保存しました。(私は定期的にダウンロードする必要があるかもしれないいくつかのデフォルトを持っています、そしてそれらを全体にマージすることは信じられないほどの苦痛でしょう)。とにかく、私は新しい実体を作りました。プログラムは正常に動作しているように見えましたが、終了すると必ず上記のエラーが発生しました。
そこでの解決策は、私の構成を見て、現在どの構成にも含まれていないエンティティがあることに気づき、それを1つに追加することでした。夢のように走ります。
これはOPの問題を修正しません。しかし、たぶんグーグル経由でここに着いた欲求不満な人が私が乗っていたボートに乗ることになるでしょう:)
iOS 4.0以降
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"model" withExtension:@"momd"];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];