首先制作多个版本的数据模型的主要原因是为了更优雅地处理迁移(升级数据库),而不是仅仅删除现有数据库并使用更改创建新数据库。
因此,如果您之前发布的应用程序版本使用了之前的数据模型,并且您希望能够优雅地升级数据库,那么只需保持之前的模型不变。
如果您创建数据模型的多个版本的唯一原因是在初始开发期间保持数据完好无损,并且没有其他人拥有您的应用程序与以前的数据模型,那么请删除。没关系。
要自动优雅地迁移您的数据模型,请在您的应用程序委托中使用以下代码:
// Returns the persistent store coordinator for the application.
// If the coordinator doesn't already exist, it is created and the application's store added to it.
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"database.sqlite"]; //change to the name of your database
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]);
//[[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil]; --delete old model if necessary
//abort(); --Abort App if necessary
}
return _persistentStoreCoordinator;
}