通过wifi在iOS设备之间同步核心数据?

时间:2013-02-01 21:08:41

标签: iphone ios objective-c core-data asyncsocket

我想通过wifi在iOS设备之间同步核心数据。我知道如何与ASyncSockets建立连接,但我不确定下一步 - 同步核心数据。

我知道用于在iOS和Mac之间进行同步的ZSync项目,但我想知道是否有人知道在iOS设备之间是否可以做同样的事情。

2 个答案:

答案 0 :(得分:0)

您可以通过多种方式解决这个问题,但我会考虑其中一种:

  1. 获取NSManagedObject子类'属性,将它们转换为NSData,然后使用AsyncSocket传输它们。然后,当接收应用程序收到所有属性时,它会在自己的数据库中重新创建对象。

  2. 立即转移整个数据库。无需重新创建任何内容。

  3. 第一个选项的优点是它只发送它需要的内容。如果您有数千个对象,并且您更改了一个对象,则只传输该对象。另一方面,如果你在那个对象上有几个关系,那么事情会变得非常复杂,因为你也必须发送相关的对象。

    第二个选项对您来说最简单,但效率不高。如果更改了一个对象,则会发送整个数据库。如果您的数据库大小为几兆字节,那可能需要一段时间,而且每次进行更改时都会这样做。

    理想情况下,您可以按照iCloud的方式进行操作。只推/拉已经改变的东西。我不知道iCloud如何确定的实现,但我敢打赌,这不是一件小事。无论哪种方法最适合您,取决于数据库的大小以及修改对象的频率。方法2最适用于一个大而复杂的数据库,几乎没有修改,方法1如果你的数据库相对简单(没有或很少的关系)并经历了很多变化。

答案 1 :(得分:0)

如果你可以通过网络我肯定会选择iCloud,它会以有效的方式为你处理。如果你的应用程序应该只能在wifi上工作,也许你可以重新实现iCloud的相同行为。它的工作方式在文档Using Core Data with iCloud Programming Notes中描述:

  

在iOS 5中,Core Data包含一些增强功能,可支持SQLite存储与iCloud的高效集成。主要的新功能是您提交给持久存储的每个更改都记录在存储在iCloud中的离散事务日志文件中,而不是直接将持久存储文件保存在云中。这意味着通过iCloud进行更改传播是有效的(另一种方法是为每次更改推送整个SQLite文件)。