2012-12-31 43 views
0

更改後的代碼併發布。現在,應用在啓動時超時,同時將持久性商店協調員更新爲新模型。想要知道遷移是否是事務性的,以便我可以制定如何解決問題。在超時之前遷移將通過遷移得到x%。核心數據(SQLite)手動遷移事務?

如果我只需要首先啓動應用程序然後遷移事務。如果不是事務性的,我擔心用戶將只有部分遷移的模式。

背景

代碼用來調用

persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 

當數據庫的新模式存在,預期它會失敗。以前用戶將被提示通過UIAlertView更新數據庫。然後將會調用以下語句。

[persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:optionsDictionary error:&error] 

如果initWithManagedObjectModel失敗,我決定運行第二行代碼。除了這個語句在` - (NSPersistentStoreCoordinator *)persistentStoreCoordinator'方法中運行外,並不那麼愚蠢,所以有時候應用程序在啓動時會超時。

在這個階段我不知道該怎麼做。數據庫是半映射到新模型還是仍然代表以前的模型?

回答

0

核心數據遷移是事務性的,即遷移在內存中完成,舊數據庫在內存中被替換爲新版本,一旦完成。

因此,在啓動時試圖遷移的超時問題在從didFinishLaunchingWithOptions方法中刪除遷移過程時得到解決。新的更新解決了那些在以前的升級中超時的人的問題。