假設我的應用程序文檔目錄中有兩個SQLite文件。我將如何將兩者結合在一起並將它們保存爲包含來自兩者的所有信息的單個文件?我是否真的必須創建兩個持久性商店協調員並手動協調這兩者之間的流程,還是有一些更有效的方法?將兩個SQLite存儲合併爲一個
-Ash
假設我的應用程序文檔目錄中有兩個SQLite文件。我將如何將兩者結合在一起並將它們保存爲包含來自兩者的所有信息的單個文件?我是否真的必須創建兩個持久性商店協調員並手動協調這兩者之間的流程,還是有一些更有效的方法?將兩個SQLite存儲合併爲一個
-Ash
你的問題並不完全是你需要問的。核心數據中的SQLite存儲僅僅是核心數據對象圖的後備存儲。它是一個SQLite數據庫的事實對於Core Data來說並不重要。所以你的問題真的是,「我如何將兩個核心數據對象圖合併成一個?」
這種情況取決於您想要對數據做什麼。核心數據中的一個規則是,不能在不同的持久存儲中的兩個對象之間建立關係。因此,如果您不需要Store A中的對象與Store B中的對象之間的關係,那就非常簡單。只需將兩個永久性存儲添加到您的NSPersistentStoreCoordinator
,並且來自兩個存儲的所有對象都將可以從與該永久性存儲協調器關聯的任何託管對象上下文中獲得。
如果您確實需要在兩個商店中的對象之間建立關係,或者您真的只想擁有一個商店,那麼最好的辦法是創建第二個NSPersistentStoreCoordinator
和第三個不同的持久性商店來保存合併對象圖。您將需要編寫代碼來創建第二個NSPersistentStoreCoordinator
附加的託管對象上下文中的對象的副本。您需要在原始對象所擁有的副本之間建立相同的關係,但是您如何去做這取決於您的數據模型。如果你想爲你的問題添加更多的細節,也許我可以給你一個更好的想法,涉及什麼。
謝謝。目前我不確定哪種方法是必要的。我更喜歡前者,因爲它比較容易,但是我不知道是否有任何負面影響,當我只需要一個文件時就會有多個文件在四處流動。 – Ash 2010-09-18 15:20:46
是的,您需要第二個持久性存儲協調器才能從正在複製的對象獲取對象,然後您需要在「主要」對象圖中創建這些對象的副本。由於對象與特定的持久存儲相關聯,因此您需要將其複製;你不能試着將它們添加到你的其他持久存儲協調器。 – Alex 2010-09-18 15:24:16
@Alex您好,我遷移兩個PersistentStore,但其中的一些數據是重複的,所以我不希望兩次在目的地存儲相同的數據在那裏有任何詭計。如果你有想法,然後回覆我..謝謝 – AJPatel 2012-05-08 11:54:29