的主要原因爲在第一時間讓您的數據模型的多個版本是處理遷移(升級數據庫)不僅僅是刪除現有的數據庫,並創建一個新的與變化更優雅。
所以,如果你有以前寄出您的應用程序的版本使用以前的數據模型,你想優雅地升級數據庫的能力,那麼就離開了以前的型號完好無損。
如果您創建數據模型的多個版本的唯一原因是最初的開發並沒有其他人在,讓您的數據保持原樣在那裏與以前的數據模型您的應用程序,然後刪除掉。沒關係。
自動遷移數據模型和優雅的使用下面的代碼在你的應用程序代理:
// 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;
}
你肯定* *所有用戶都已經升級到最新版本? – Adam
這真是一個很好的觀點,我完全錯過了。但是,這不是我的情況,因爲版本10是起始版本。 – Leonardo
請參見[this](http://stackoverflow.com/q/7708392/730701)和[this](http://stackoverflow.com/q/6712123/730701)。 – Adam