CoreDataのEntityを変更した場合、マイグレーション処理をしなければアプリケーションが落ちてしまいます。ここでは自動マイグレーションについて説明します。
1. 「設計 – データモデル – モデルバージョンを追加」
[プロジェクト名].xcdatamodeld内に
[プロジェクト名] 2.xcdatamodel が追加されます。
2. 新しくできたモデルに対して変更を行います。
3. 「新規ファイル – Resource – Mapping Model」を選びマッピングファイルを作成します。
ここでは下記のようにします。
モデル名:map_01_02.xcmappingmodel
ソースモデル:[プロジェクト名].xcdatamodel
デスティネーションモデル:[プロジェクト名] 2.xcdatamodel
4. 作成したマッピングファイルを開き、適宜変更箇所の調整をします。
5. AppDelegate.mにマイグレーション用のコードを追加します。
- (NSPersistentStoreCoordinator *)persistentStoreCoordinatorを下記のように変更します。
if (persistentStoreCoordinator_ != nil) { return persistentStoreCoordinator_; } NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"[ ファイル名 ].sqlite"];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
NSError *error = nil; persistentStoreCoordinator_ = NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel; if (![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) { NSLog(@"Unresolved error %@, %@", error, [error userInfo]); abort(); } return persistentStoreCoordinator_;
6. Xcodeで[プロジェクト名] 2.xcdatamodelを選択し
「設計 – データモデル – 現在のバージョンを設定」を選択し、「ビルドと実行」でアプリケーションが落ちなければ完了です。