首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Mac和iPhone之间同步核心数据模型

在Mac和iPhone之间同步核心数据模型
EN

Stack Overflow用户
提问于 2009-08-18 08:28:50
回答 2查看 2.5K关注 0票数 4

我目前正在构建我的核心数据模型,我想在我的应用程序的Mac和iPhone版本之间进行同步。

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

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

对于为这种情况编写同步代码,比如在模型的两个实例之间同步记录,有什么好的链接和资源吗?

同步是一个相当多的边缘案例的问题,在过去人们已经解决了很多次,所以我希望能找到一些关于这个主题的信息,但我能找到的只是苹果的SyncServices (iPhone上没有)和一些微软同步技术的链接。

我真的在寻找通用的理论,这样我就可以自己实现它,而不一定是现成的解决方案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-19 10:36:56

SyncML规范可能会有所帮助,但它很难读懂,而且明显偏向于SyncML。

我不得不为Task Coach实现这一点,所以这里有一些想法:

一个修改标志就足够了,时间戳并不能提供更多的信息。通常,我的对象处于以下状态之一:

  • None
  • New
  • Deleted
  • Modified

当对象被修改时,会发生以下转换:

  • None -> Modified
  • ->
  • -> ( -> not
  • Modified->

删除时会有以下几个:

  • None -> deleted
  • -> Actually (可以从storage)
  • Deleted ->中将其删除(不应删除->
  • ->

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

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

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

  • modified/deleted.如果用户选择信任该设备,则用该设备的桌面对象替换该桌面对象;否则,该桌面什么也不做并保持已删除状态,以便在阶段2.
  • deleted/modified:中将该对象从该设备中移除。如果该设备获胜,则该对象实际上从该桌面中被删除。否则,该对象在桌面上进入新状态,以便在阶段2.
  • deleted/deleted: Duh中在设备上恢复它。只需将其从storage.
  • modified/modified:中删除,用户可以逐个字段地决定要保留哪些值。桌面上的状态保持为Modified,以便在阶段2中将这些选择传播回设备。

如果为每个字段保持修改状态,则可以避免一些冲突,使得例如在设备上具有修改过的主题并且在桌面上具有修改过的摘要的对象将不会触发冲突。

你可以看看Task Coach的代码作为一个例子( SourceForge上的SVN仓库,它有Python语言的桌面应用程序和iPhone应用程序)。实际上,在这种情况下,我决定使用一种更简单的方法;我不跟踪桌面上的状态。在第一阶段(从设备到桌面)之后,我只需要将设备上的对象完全替换为桌面上的对象。因此,不存在冲突(设备始终获胜)。

显然,这只适用于两个固定的设备;如果你想与几个手机/桌面应用程序同步,你必须为每个设备/应用程序分配一个唯一的ID,并为不同的设备/应用程序保留不同的状态。这可能会开始变得复杂起来。

HTH

票数 8
EN

Stack Overflow用户

发布于 2010-08-04 08:57:54

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1292561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档