gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 03:59:17 27 4
gpt4 key购买 nike

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

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

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

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

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

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

最佳答案

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

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

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

  • 没有
  • 已删除
  • 修改

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

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

以及删除时的以下内容:

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

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

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

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

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

如果为每个字段保留修改状态,则可以避免一些冲突,这样例如在设备上修改主题和在桌面修改摘要的对象将不会触发冲突。

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

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

HTH

关于iphone - 在 Mac 和 iPhone 之间同步核心数据模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1292561/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com