コアデータアプリケーションがあり、コアデータモデルを移行(アップグレード)しています。新しいバージョンを作成するたびに、各バージョンのマッピングモデルが作成されます。 今は16バージョンあり、このようなマッピングモデルがあります。 1to2.xcmappingmodel 2to3.xcmappingmodel 3to4.xcmappingmodel ...など。最大16複数のバージョンのコアデータを移行する
これはうまくいきますが、あるユーザーがバージョン10のデータファイルを持ち、バージョン16のアプリケーションを更新すると問題が発生します。コアデータが自動的に10から16にアップグレードされると思った「欠落マッピングモデル」と表示されるエラーが表示されます。マッピングモデルが正しいかどうかを確認するために、私はバージョンごとに1つずつ(10から11,11から12など)アップグレードし、それはうまくいきました... ここに私のコードです。
私はこのコードでモデルのバージョンを指定:
NSBundle *modelWrapper = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"TaskApp_DataModel" ofType:@"momd"]];
NSString *modelPath = [modelWrapper pathForResource:@"TaskApp_DataModel 16" ofType:@"mom"];
NSLog(@"%@",modelPath);
managedObjectModel = [[NSManagedObjectModel alloc]initWithContentsOfURL:[NSURL fileURLWithPath:modelPath]];
をそして私はここに移行自動オプションを定義します。
NSURL *url = [NSURL fileURLWithPath: [applicationSupportDirectory stringByAppendingPathComponent: @"storedata-sql"]];
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:url
options:dict
error:&error]){
誰もがこれをアップグレードする方法を知っていますか? ありがとうございます。
はい悪いニュースの運び手であることが申し訳ありませんが、あなたに感謝...私はちょうどそれはマーカスZarraコアデータブックに...彼は余分を記述することなく、次の各モデルから移行する大きな手順を書きましたマッピングモデル。ありがとう、NSINfersMappingModelをチェックするつもり! –
InfersMappingModelが機能しました!ありがとう! –
オーバーヘッドが非常に急速に増加するため、データマイグレーションを最小限に抑えてください(各バージョンから現在のバージョンへの各バージョンのモデルのマッピング)。また、あるバージョンから次のバージョンへの自動移行を使用すると、しかし、あなたのモデルはバージョン16から21までは十分に変化するので、違いを計算することができません。あなたがそれを整理してうれしい! – MCannon