如何在设备之间同步核心数据?

时间:2011-07-09 09:39:30

标签: iphone ios ipad core-data synchronization

我有一个使用coredata存储其内容的iphone应用程序。用户经常问我是否可以提供一种在他们的移动设备(ipod / iphone / ipad)之间同步数据的方法。截至目前,我不知道如何实现这一目标。 我找到了zsync,但这似乎取决于应用程序的osx版本(我没有)。我还读到了即将推出的iclouds同步功能,它似乎是我需要的 - 但我认为不可能同步coredata内容,而只能同步基于文本的内容(例如xml存储文件)。这是真的吗?

我想到的另一种方式是滥用eventkit api通过用户提供的日历进行同步。由于我的应用程序主要是管理事件,可以选择存储在用户日历中(除了coredata存储),通过日历同步对我来说似乎很好。但我认为同步可能会破坏,例如当用户选择不同步整个日历,但仅在设备设置/帐户设置中同步3个月。

任何人都知道我的方法应该如何?任何提示?

1 个答案:

答案 0 :(得分:1)

将设备同步到设备(如果这是您要实现的目标)可能非常棘手。您可以实现自己的发现和数据传输协议,并以这种方式工作,但这可能是相当多的工作。

假设您已经拥有某种形式的注册/登录系统的服务器,则将设备同步到服务器到设备会更简单一些。然后,您只需要一种方法将当前数据库状态传达给服务器,然后再从服务器返回到其他设备。这样做还有相当多的工作,但至少是计算哪些设备与其他设备同步以及它们如何将数据从一个设备传输到另一个设备的逻辑在服务器的工作中都是隐含的。

对于iCloud,您通过它同步的程序化内容需要从UIDocument派生,因此它无法帮助您使用通用核心数据实体。

如果您正在寻找一种开箱即用的解决方案,可以将所有Core Data内容从一台设备同步到另一台设备,而无需自定义代码,那么确实没有。您可以合理地获得的最接近的是将应用程序使用的整个.sqlite文件从一个设备发送到另一个设备,从而覆盖目标设备.sqlite文件。如果您的同步只需要是单向的,那么它可以正常工作,但显然不适合其他用例。也许您可以将此模型与iCloud一起使用,如果您可以将其作为原子实体同步应用程序的整个.sqlite文件。