2014-04-19 35 views
1

設置:我有一個使用iCloud + Core Data的應用程序。它包含一個用於開啓/關閉iCloud的開關,當這種情況發生時,數據將遷移到本地/ iCloud商店/從本地/ iCloud商店遷移。iCloud數據複製

問題: iCloud on。添加核心數據對象。切換到本地。切換回iCloud。現在有兩個相同的對象。

我今天準備這樣的情況發生:我假設,這是預期,而我需要去複製,當我一個本地存儲遷移到iCloud中存儲(糾正我,如果這不是預期)。我無法弄清楚去除重複的正常方式在哪裏或如何。在我的代碼中,我應該執行重複數據刪除,大致應該是什麼樣的代碼?

+0

您是否在切換到本地後刪除了iCloud存儲?如果不是,那麼在將本地商店遷移回iCloud時,您會得到重複。 –

回答

5

當您收到NSPersistentStoreDidImportUbiquitousContentChangesNotification通知時,您通常會對數據進行重複數據刪除,並且已將更改合併到上下文中。合併後,查看數據和重複數據刪除。

這裏是重複數據刪除一個很好的教程:http://www.atomicbird.com/blog/icloud-complications-part-2

重複數據刪除是在我看來,核心數據+ iCloud中的較差設計的一個方面。其他同步解決方案(如Wasabi SyncEnsembles)允許您提供全局標識符作爲重複數據刪除的替代方案。我覺得它是一個更清潔的解(披露:我是Ensembles的開發人員。)

+0

因爲我以爲你試圖向我推銷合唱團,所以首先駁回了你的答案。發現它是免費的......而且很棒。就像,我與大約30分鐘的工作完美同步。與iCloud花費數天時間比較,即使在iOS 7上也能獲得越野車慢速同步。謝謝! –

+0

我可以問一下,爲什麼ensembles沒有一個委託調用「ensembleCloudDataDidChange」的一些東西,以便在其他設備上更改某些內容時,它可以在當前設備上進行實時更新。我已經編寫了自己的iCloud解決方案,用於監視無處不在的iCloud文件夾的變化,這很容易。爲什麼不把它變成一個合奏功能? –

+0

最好在其他地方提出合奏問題,但簡短的答案是在'CDEICloudFileSystem.h'中查找。它有一個通知,當下載新文件時觸發,這是合併的好時機。 –