2014-09-12 53 views
4

我真的很苦惱這一點。我正在嘗試創建我的活動核心數據庫的備份。根據蘋果最好的選擇是不使用文件管理器,但方法migratePersistentStore。但是我不太明白這一點。我的AppDelegate中有PersistentStoreCoordinator。因此,如果我正在遷移持久存儲,我的協調器在成功移動它之後會丟失它?所以商店現在只是在新的位置,而不是舊的?那麼,您是否有任何示例程序代碼來說明我的應用程序如何仍能繼續使用原始副本運行?CoreData:如何正確使用migratePersistentStore來創建備份副本

或者我不能只使用filemanager複製所有文件與相同的前綴,而不是遷移?!更容易...

+0

我正在努力解決同樣的問題。您是否找到了使用migratepersistentstore實現備份並將當前商店保持在同一位置的方法? – Tuslareb 2015-01-25 22:26:52

回答

1

您可以創建一個單獨的NSPersistentStoreCoordinator進行遷移,並繼續使用常規的CoreData堆棧。你也可以使用NSMigrationManager遷移:

NSMigrationManager* manager = [[NSMigrationManager alloc] initWithSourceModel:sourceModel 
                  destinationModel:targetModel]; 

BOOL migratedSuccessfully = [manager migrateStoreFromURL:sourceStoreURL 
                type:type 
               options:nil 
             withMappingModel:mappingModel 
             toDestinationURL:destinationStoreURL 
             destinationType:type 
             destinationOptions:nil 
                error:error]; 

而且我不知道,你可以遷移你的數據庫被打開時,可能就需要鎖定或東西。

+1

要創建新的臨時NSPersistentStoreCoordinator是關鍵。使用它進行遷移,然後忘記它。我有一門課,我保留整個堆棧,所以我創建了一個全新的堆棧,將其用於遷移並忘記它,不用擔心。 – 2016-05-21 17:47:37

+0

你碰巧有一個將臨時存儲遷移到iCloud的例子嗎? – SAHM 2017-05-03 22:09:48

+0

不,很不幸,我沒有機會使用iCloud CoreData。 – 2017-05-04 12:33:00