我想通过 wifi 在 iOS 设备之间同步 Core Data。我知道如何与 ASyncSockets 建立连接,但我不确定下一步 - 同步核心数据。
我知道用于在 iOS 和 Mac 之间同步的 ZSync 项目,但我想知道是否有人知道是否可以在 iOS 设备之间做同样的事情。
我想通过 wifi 在 iOS 设备之间同步 Core Data。我知道如何与 ASyncSockets 建立连接,但我不确定下一步 - 同步核心数据。
我知道用于在 iOS 和 Mac 之间同步的 ZSync 项目,但我想知道是否有人知道是否可以在 iOS 设备之间做同样的事情。
您可以通过多种方式解决此问题,但我会考虑以下两种方式之一:
获取NSManagedObject
子类的属性,将它们转换为NSData
,然后使用 AsyncSocket 传输它们。然后,当接收应用程序收到所有属性时,它会在自己的数据库中重新创建对象。
一次传输整个数据库。无需重新创建任何东西。
第一个选项的优点是它只发送它需要的东西。如果您有数千个对象,而您更改了一个对象,那么您只会转移那个对象。另一方面,如果您在一个对象上有多个关系,事情会变得非常复杂,因为您还必须发送相关对象。
第二个选项对您来说最简单,但效率不高。如果您更改一个对象,您将发送整个数据库。如果您的数据库大小为几兆字节,则可能需要一段时间,而且您每次进行更改时都会这样做。
理想情况下,您可以按照 iCloud 的方式进行操作。仅推/拉已更改的内容。我不知道 iCloud 如何确定这一点的实现,但我敢打赌这不是一件小事。哪种方法最适合您取决于您的数据库有多大以及对象的修改频率。方法 2 最适用于修改很少的大型复杂数据库,方法 1 如果您的数据库相对简单(没有关系或关系很少)并且经历了很多更改。
如果您可以通过网络浏览,我肯定会使用 iCloud,它可以有效地为您处理这个问题。如果您的应用应该只能在 wifi 上运行,也许您可以重新实现 iCloud 的相同行为。它的工作方式在文档Using Core Data with iCloud Programming Notes中有描述:
在 iOS 5 中,Core Data 包括增强功能以支持 SQLite 存储与 iCloud 的有效集成。主要的新功能是您提交到持久存储的每个更改都记录在存储在 iCloud 中的离散事务日志文件中,而不是将持久存储文件直接保存在云中。这意味着通过 iCloud 传播更改是有效的(替代方法是为每次更改推送整个 SQLite 文件)。