iCloud De-duplication

来源:互联网 发布:汉邦网络摄像机默认ip 编辑:程序博客网 时间:2024/06/05 03:07

http://stackoverflow.com/questions/23169730/icloud-data-duplication/23172936#23172936

http://www.atomicbird.com/blog/icloud-complications-part-2



iCloud data duplication

up vote1down votefavorite

THE SETUP: I have an app that uses iCloud + Core Data. It contains a switch to turn iCloud on/off, and when this happens, data is migrated to/from local/iCloud stores.

THE PROBLEM: iCloud on. Add Core Data object. Switch to local. Switch back to iCloud. Now there are two identical objects.

WHAT I'D LIKE TO HAPPEN: I'm assuming that this is expected, and that I will need to de-duplicate when I migrate a local store to an iCloud store (correct me if this isn't expected). I can't figure out where or how the normal way to de-duplicate is. Where in my code should I perform de-duplication, and roughly what should the code look like?

shareedit
 
 
Are you removing the iCloud store after switching to local? If not then you will get duplicates when migrating the local store back to iCloud. –  Duncan Groenewald Apr 27 '14 at 11:28

1 Answer

activeoldestvotes
up vote4down voteaccepted

You would usually deduplicate the data when you receive the NSPersistentStoreDidImportUbiquitousContentChangesNotification notification, and you have merged the changes into your context. After merging, go through the data and dedupe.

Here is a good tutorial on deduping: http://www.atomicbird.com/blog/icloud-complications-part-2

Deduplication is one of the poorer design aspects of Core Data + iCloud in my view. Other sync solutions, like Wasabi Sync and Ensembles, allow you to provide global identifiers as an alternative to deduplication. I find it a cleaner solution. (Disclosure: I am the developer of Ensembles.)

shareedit
 
 
Dismissed your answer at first as I thought you were trying to sell me ensembles. Turns out it's free... and brilliant. Like, I have perfect sync with about 30 mins of work. Compare that to days spent with iCloud to get buggy slow sync, even on iOS 7. Thank you! –  Jordan May 8 '14 at 6:55
 
Can I ask, why does ensembles not have a delegate call something along the lines of "ensembleCloudDataDidChange" so that when something is changed on another device, it can update live on the current device. I've coded my own solution for iCloud that watches for changes to the ubiquitous iCloud folder, it was pretty easy. Why not make this an ensembles feature? –  Jordan May 8 '14 at 6:58 
 
Best to ask ensembles questions elsewhere, but the short answer is to look in CDEICloudFileSystem.h. It has a notification that fires when new files are downloaded, which is a good time to merge. – Drew McCormack May 8 '14 at 18:25

0 0
原创粉丝点击