2013-03-27 137 views
0

我正在使用核心數據作爲其存儲功能。在某些時候,我做了需要我更新本地對象圖的外部API調用。我目前的(愚蠢的)計劃是清除舊的NSManagedObjects的所有實例(無論它們是否已更新),並用它們的新等價物替換它們 - 一種王牌合併策略。使用核心數據作爲緩存

我覺得有一個更好的方法來做到這一點。我有來自服務器的唯一標識符,所以我應該能夠將它們與商店中的對象相匹配。有沒有辦法做到這一點,而不需要通過標識符手動獲取上下文中的對象並重置每個屬性?有沒有一種方法可以讓我創建一個全新的上下文,重新生成對象圖,並根據其唯一標識符將它提交給Core Data進行合併?

+0

Apple對需求有很好的指導 - [有效導入數據](https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdImporting.html)。尤其要查看**實現Find-or-Create Efficiently **部分。 – 2013-03-27 18:21:18

回答

0

根據服務器的唯一ID進行匹配的策略是一種很好的方法。希望你可以讓你的服務器只提供自上次更新(你將追蹤並在服務器調用中提供)以來發生變化的對象。

但是,爲了更新Core Data對象,您必須獲取它們,實例化NSManagedObjects,進行更改並保存它們。您可以在後臺線程(子上下文,performBlock:)中完成此操作,但仍然需要將對象往返回存儲。在子環境和自己的線程中執行它將使您的UI快速流暢,但是您仍然必須執行處理。

另一個想法:在過去的一天左右我一直在本地閱讀AFIncrementalStore,一個NSIncrementalStore實現它使用AFNetworking提供按需核心數據特性,高速緩存。我還沒有建立任何東西,但它看起來很漂亮。這聽起來像你的項目可能是一個很好的使用這個庫。代碼在GitHub上:https://github.com/AFNetworking/AFIncrementalStore

+0

Hi Hal,我一直在玩AFIncrementalStore :)它確實看起來很棒,但不幸的是,在缺乏示例實現的情況下,我們需要大量時間來推出自己的商店。即使我確實實施了自己的商店,但我仍不確定這將如何幫助我將我的「網絡」商店中的數據與本地商店合併。無論哪種方式,謝謝你的提示! – 2013-03-28 20:28:34