2012-02-22 68 views
2

我有兩個持久性存儲與使用相同模型的對象。我想在一個上下文中打開兩個商店,但只將上下文保存到單個商店,然後安全地刪除其中一個商店。我本質上是試圖將兩個持久存儲的內容合併到一個持久存儲中。因爲這些實體有關係,所以我覺得這很困難。將對象從多個商店保存到單個持久存儲庫

this answer

如果您還需要有對象之間的關係在這兩個商店,或者你真的只是想有一個單店,最好的辦法是創建第二NSPersistentStoreCoordinator和第三,不同的持久性存儲來容納合並的對象圖。您將需要編寫代碼來創建連接到第二個NSPersistentStoreCoordinator的託管對象上下文中對象的副本。您需要在原始對象所擁有的副本之間建立相同的關係,但是您如何去做這取決於您的數據模型。

這使得看起來很清楚,除了詳細說明如何從字面上製作新商店對象的副本。這是一個遷移問題嗎?

回答

0

最後,我用下面的方法:

[migrator migrateStoreFromURL:[NSURL fileURLWithPath:incomingPath] 
         type:nil 
         options:nil 
      withMappingModel:managedObjectModel 
      toDestinationURL:[NSURL fileURLWithPath:finalPath] 
       destinationType:nil 
      destinationOptions:nil 
         error:&err]; 

[persistentStoreCoordinator removePersistentStore:[[persistentStoreCoordinator persistentStores]lastObject] error:&err]; 

在文件「incomingPath」是我進口的商店,在「finalPath」已經存在的存儲,我想合併到文件中。兩個商店都在同一個持續協調員中打開,並且都使用相同的對象模型。然後,我刪除了即將到來的商店,並再也沒有看過它;我想我可以在文件系統級別刪除它。

對於我的特定數據需求,我然後提取所有記錄,剔除重複項,並保存上下文。

我發表了這個答案,因爲作爲一個核心數據新手這個簡單的遷移解決了「不能保存與不同商店中的對象的關係」問題非直觀的問題。

相關問題