我的應用程序當前正在應用程序商店中,並且正在使用單個添加的屬性更新數據模型。我添加了一個模型版本並將其設置爲當前版本。核心數據輕量級遷移問題
一切正常,但是當我測試的應用程序的新版本通過包含數據的舊版本安裝時,應用程序無法加載沒有錯誤消息。它會繼續失敗(只是在屏幕上短暫閃爍),直到我重新啓動設備,或者通過XCode或iTunes再次安裝更新的應用程序,然後應用程序運行良好並且數據已正確遷移。
我的擔心是,如果客戶遇到這種情況,他們會在重新安裝前刪除應用程序並丟失所有數據。有沒有人有任何見解?任何幫助表示讚賞
謝謝, 我使用的應用程序爲代表的數據遷移下面的代碼:
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel != nil) {
return managedObjectModel;
}
NSString *path = [[NSBundle mainBundle] pathForResource:@"DataStore" ofType:@"momd"];
NSURL *momURL = [NSURL fileURLWithPath:path];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];
return managedObjectModel;
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}
NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"DataStore.sqlite"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:storePath]) {
NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"DataStore" ofType:@"sqlite"];
if (defaultStorePath) {
[fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL];
}
}
NSURL *storeUrl = [NSURL fileURLWithPath:storePath];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES],
NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES],
NSInferMappingModelAutomaticallyOption, nil];
NSError *error;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
// Update to handle the error appropriately.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
exit(-1); // Fail
}
return persistentStoreCoordinator;
}
感謝您的回覆,我再次查看了數據模型,看起來正確。我也回到了我以前發佈的版本,並重新添加了一個新的數據版本,並獲得了相同的結果。 – 2010-12-10 01:09:30
你有什麼建議,爲什麼從根本上說它不會第一次工作,但第二次成功的遷移工作很好嗎?我必須做些什麼才能確保它能夠第一次運行,也許原始數據模型沒有被正確讀取或者是什麼? – 2010-12-10 01:12:00
當然,它的設計是第一次工作。我在我正在構建的應用程序中成功地使用了這種遷移,而且沒有問題。遷移發生時,是否有可能新創建的屬性未正確初始化?即您希望在插入而不是獲取時設置一些值?你是否已經配對了你的應用程序,以便除了嘗試遷移並顯示簡單的視圖控制器之外,它什麼也不做?看起來像是在遷移導致崩潰後訪問數據的東西。 – DigitalBytes 2010-12-10 03:16:21