2012-12-05 84 views
0

我想製作我的核心數據數據庫的備份副本,無需使用文件管理器複製sqlite文件或使用持久存儲協調器migratePersistentStore方法(因爲這裏解釋太長的原因)。我想要做的是打開一個與原始文件具有相同MOMD的新持久性存儲,創建一個新的託管對象上下文,然後遍歷數據庫中的所有對象並將它們插入到新的上下文中。核心數據:製作數據庫的對象副本

這將適用於簡單的實體,但問題是我的模型有大約20個實體,其中許多實體具有一對多和多對多的關係。稍微複雜一點的解決方案是將每個對象插入到新的MOC中,然後將所有新的託管對象保存在內存中,並使用它們在後續遍歷中綁定對象之間的所有關係。但它似乎是一個非常混亂的解決方案。

是否有一種乾淨優雅的方式來實現這一目標,這可能適用於任何類型的數據模型,而不僅僅是我自己模型的定製解決方案,而不必同時將所有對象都放在內存中?

謝謝。

回答

0

複製持久性存儲遠遠超出了最簡單的方式 - 我建議重新考慮一下它的原因或解釋它們是什麼。

將對象從一個上下文複製到另一個上下文 - 從一個磁盤上的永久存儲到另一個 - 並不一定同時將它們全部保存在內存中。核心數據可以將它們變成錯誤。

+0

謝謝。我不能在iCloud方面存在一些限制,因爲您無法遷移或複製文件並將其與其他一些iCloud帳戶(甚至沒有iCloud帳戶)一起使用。 –

+0

如何從iCloud獲取數據? – paulmelnikow

+0

這是通過使用migratePSC API,但它被證明是一個大內存豬。這就是爲什麼我要用逐個對象的方式來進行復制的原因,所以我可以更好地控制內存壓力。 –