如何在 iCloud 中强制版本冲突

1 conflict icloud

我有一个 iCloud 的工作实现。现在我想通过添加一些合并功能来改进冲突处理。我一直试图想出一种一致的方式来强制冲突以进行测试,但到目前为止我还没有运气,当我期望冲突发生时,冲突不会持续发生。这可能表明我做错了什么,或者我只是误解了 iCloud 的工作原理(我的意思是另一件事)。

我正在使用 UIDocument,是的,我正在收听 UIDocumentStateChangedNotification。事实上,我偶尔会收到一些冲突通知。另外,我在 iCloud 中只有一个文件。

有两个设备使用相同的 iCloud 帐户,这里是我期望总是会引起冲突的事件流:

  • 在两个设备上打开文件(现在两个设备都可以正确看到相同的内容)。注意:这是唯一一次调用 openWithCompletionHandler 的时间,此后不再调用。
  • 在设备 A 上进行一些更改并调用 saveToURL。
  • 等待一段时间以允许更改传播。
  • 在设备 B 上进行一些其他更改并调用 saveToURL。
  • 等待一段时间以允许更改传播。
  • 预期:该应用程序应该会收到来自 iCloud 的冲突通知。观察:确实偶尔会发生冲突,但大多数情况下发生的只是 UIDocument 设置了其 UIDocumentStateEditingDisabled 标志,然后在半秒左右后清除(我猜想编辑在 iCloud 守护程序运行时被禁用从其他设备中提取版本并将其保存在本地无处不在的目录中)。

很像 SVN 这样的版本控制系统,我期望来自设备 B 的版本会导致冲突,因为需要“更新”才能获取设备 A 上传的版本。

在我刚刚描述的场景中期待冲突是错误的吗?为什么?有没有其他方法可以持续地强迫冲突?

谢谢!

nev*_*ing 5

我原以为引起冲突的更好方法是:

  • 确保两台设备都有最新的数据副本
  • 将两台设备都置于飞行模式以防止任何 iCloud 更新
  • 在两台设备的同一个地方更改数据,每台设备都有不同的新数据
  • 重新打开网络
  • 等待更改传播

从文档:

当应用程序的两个实例在本地更改文件,然后将两个更改传输到 iCloud 时,就会发生冲突。例如,当设备处于飞行模式且无法立即将更改传输到 iCloud 时进行更改时,就会发生这种情况。当它发生时,iCloud 会存储文件的两个版本,并通知应用程序的文件演示者发生冲突并需要解决。

您这样做的方式(留出时间进行同步,以不同方式更改文档)似乎不应该引起冲突。