繁体   English   中英

在Mac和iPhone之间同步Core Data模型

[英]Syncing Core Data model between Mac and iPhone

我目前正在构建我的Core Data模型,我希望在我的应用程序的Mac和iPhone版本之间进行同步。

我将使用Bonjour进行设备发现等,但我对问题的数据同步部分有疑问。

到目前为止,我已经为每个将参与同步的对象添加了UID和修改时间戳,因此我应该能够匹配对象并检测哪些对象已经更改。

是否有关于为这种情况编写同步代码的良好链接,资源,即在模型的两个实例之间同步记录?

同步是一个问题,有很多边缘情况,过去人们已经解决了很多次,所以我期待找到关于这个主题的一些信息,但我能找到的只是Apple的SyncServices的链接(它不存在于iPhone)和一些MS同步技术。

我真的在寻找一般理论,所以我自己可以实现它,不一定是现成的解决方案。

SyncML规范可能有所帮助,但它很难阅读,显然偏向于SyncML。

我必须为Task Coach实现这个,所以这里有一些想法:

修改标志就足够了,时间戳实际上并没有真正提供更多信息。 通常,我的对象处于以下状态之一:

  • 没有
  • 删除
  • 改性

修改对象时发生以下转换:

  • 无 - >修改
  • 新 - >新
  • 删除 - >(不应该发生)
  • 修改 - >修改

以及删除时的以下内容:

  • 无 - >已删除
  • 新建 - >实际删除(可能会从存储中删除)
  • 删除 - >(不应该发生)
  • 修改 - >删除

同步时,设备首先向桌面发送状态不同于None的所有对象。 如果其中一个状态为!=无,则桌面会要求用户解决冲突。 在任何情况下,对象在设备上进入状态None,或者如果状态为Deleted则从存储中删除。

然后,桌面会将自己的更改发送到设备。 由于设备上的所有对象都处于无状态,因此不存在冲突。 桌面上的对象进入状态无或从存储中删除,同步结束。

根据设备/桌面状态,有两种类型的可能冲突:

  • 改性/删除。 如果用户选择信任该设备,则将桌面对象替换为设备对象; 否则,桌面不会执行任何操作并保持已删除状态,以便在第2阶段将对象从设备中删除。
  • 删除/修改:如果设备获胜,则实际从桌面删除该对象。 否则,对象将进入桌面状态New,以便在阶段2中在设备上恢复。
  • 删除/删除:Duh。 只需将其从存储中删除即可
  • 修改/修改:用户可以逐个字段地决定要保留哪些值。 状态在桌面上保持为“已修改”,以便在第2阶段将这些选项传播回设备。

如果为每个字段保留Modified状态,则可以避免某些冲突,例如,设备上具有已修改Subject的对象和桌面上已修改的Summary将不会触发冲突。

您可以查看Task Coach的代码示例(SourceForge上的SVN存储库,它同时包含Python中的桌面应用程序和iPhone应用程序)。 实际上,在这种情况下,我决定使用更简单的方法; 我没有跟踪桌面上的状态。 在第1阶段(设备到桌面)之后,我只需用桌面上的对象完全替换设备上的对象。 因此,没有冲突(设备总是赢)。

显然,这仅适用于两个固定设备之间; 如果要与多个电话/桌面应用同步,则必须为每个应用分配唯一的ID,并为不同的设备/应用保留不同的状态。 这可能会变得毛茸茸。

HTH

Marcus Zarra创建了一个名为ZSync的框架,以简化iPhone / iPad应用程序与Mac同行的同步。 看看它,它可能有助于解决问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM