有一种方法,这种方法称为自动轻量级迁移。更改对象模型时,它需要代码更改和额外的步骤。
对于代码,您必须在初始化持久存储协调器的方法中添加两个选项。像这样的东西:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator_ != nil) {
return persistentStoreCoordinator_;
}
NSString *storePath = [AppDelegate_Shared coredataDatabasePath];
NSURL *storeURL = [NSURL fileURLWithPath:storePath];
// important part starts here
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]) {
// and ends here
LogError(@"Unresolved error %@, %@", error, [error userInfo]);
// Do something
}
return persistentStoreCoordinator_;
}
现在,如果您想更改模型,则必须在进行任何更改之前创建模型版本。
选择您的数据模型,然后进入主菜单Design -> Data Model -> Add Model Version
。您的“旧”模型将被重命名,并且您在当前模型中进行更改,即带有绿色标记的模型。
所有旧模型都将保留并放入您的应用程序中,因此您的应用程序可以执行“自动轻量级迁移”并将现有数据库升级到新模型。