iCloud De-duplication

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

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



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?

share edit
 
 
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

up vote 4 down vote accepted

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.)

share edit
 
 
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值