5

Core Dataアプリケーションがあり、コアデータモデルを移行(アップグレード)しています。新しいバージョンを作成するたびに、バージョンごとにマッピングモデルを作成します。現在、16のバージョンがあり、次のようなマッピングモデルがあります:1to2.xcmappingmodel 2to3.xcmappingmodel3to4.xcmappingmodel...など。16まで

これは正常に機能しますが、1人のユーザーがバージョン10のデータファイルを持っていて、バージョン16のアプリケーションを更新すると問題が発生します。CoreDataが自動的に10から16にアップグレードされると思ったのですが、「Missingマッピングモデル」。マッピングモデルが正しいことを確認するために、各バージョンに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]){

誰かがこれをアップグレードする方法を知っていますか?ありがとうございました。

4

1 に答える 1

1

ユーザーの既存のバージョン(おそらくv1)から現在のバージョンに移行しようとするだけです。3つのバージョンがある場合は、v1-v2、v2-v3、v1-v3のマップが必要です。16バージョンすべてが出荷されましたか?その場合、新しい移行マップの作成を開始する必要があるかもしれません。これまでに試したことがない場合は、自動移行を有効にする価値があります。これは、ギャップを埋めるのに非常に優れている可能性があるためです。私はそう思う:

[dict setObject:[NSNumber numberWithBool:YES] forKey:NSInfersMappingModel];

ただし、それを再確認する必要があります。

悪いニュースをもたらしたことをお詫びします

于 2010-11-29T23:49:58.307 に答える