【问题标题】:how to synchronize coredata between devices?如何在设备之间同步coredata?
【发布时间】:2011-07-09 09:39:29
【问题描述】:
我有一个使用 coredata 存储其内容的 iphone 应用程序。用户经常问我是否可以提供一种在他们的移动设备(ipod/iphone/ipad)之间同步数据的方法。截至目前,我不知道如何实现这一目标。
我找到了 zsync,但这似乎取决于应用程序的 osx 版本(我没有)。我还阅读了即将推出的 iclouds 同步功能,这似乎是我所需要的 - 但是我认为它不可能同步 coredata 内容,而只能同步基于文本的内容(例如 xml 存储文件)。这是真的吗?
我想到的另一种方法是滥用 eventkit api 通过用户提供的日历进行同步。由于我的应用程序主要管理事件,可以选择将其存储在用户日历中(除了 coredata 存储),通过日历同步对我来说似乎很好。但是我认为同步可能会中断,例如当用户选择不同步整个日历而只在设备设置/帐户设置中同步 3 个月时。
有人知道我的方法应该是什么样的吗?有什么建议吗?
【问题讨论】:
标签:
iphone
ios
ipad
core-data
synchronization
【解决方案1】:
将设备同步到设备(如果这是您想要实现的目标)可能非常棘手。您可以实现自己的发现和数据传输协议并以这种方式解决问题,但这可能需要相当多的工作。
假设您已经拥有一台带有某种形式的注册/登录系统的服务器,那么将设备同步到服务器到设备会更简单一些。然后,您只需要一种将当前数据库状态传送到服务器的方法,然后再从服务器返回到其他设备。同样,这涉及到相当多的工作,但至少计算哪些设备与哪些其他设备同步以及它们如何将数据从一个设备传输到另一个设备的逻辑都隐含在服务器的工作中。
对于 iCloud,您通过它同步的程序化内容需要从 UIDocument 派生,因此它无法帮助您处理通用的 Core Data 实体。
如果您正在寻找一种开箱即用的解决方案,无需自定义代码即可将您的所有 Core Data 内容从一台设备同步到另一台设备,那么真的没有。您可以合理获得的最接近的方法是将您的应用程序使用的整个.sqlite 文件从一台设备传送到另一台设备,覆盖目标设备.sqlite 文件。如果您的同步只需要是单向的,那效果很好,但显然不适合其他用例。如果您可以将应用程序的整个.sqlite 文件同步为原子实体,也许您可以将此模型与 iCloud 一起使用。