如何在iCloud中强制版本冲突

时间:2012-04-11 15:08:29

标签: conflict icloud

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

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

让两个设备使用相同的iCloud accout,这是我期望总是引起冲突的事件流:

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

就像SVN这样的版本控制系统,我期待设备B的版本引起冲突,因为需要“更新”才能获得设备A上传的版本。

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

谢谢!

2 个答案:

答案 0 :(得分:4)

我原本认为引发冲突的更好方法是:

  • 确保两台设备都具有最新的数据副本
  • 将两台设备置于飞行模式以防止任何iCloud更新
  • 更改两台设备上相同位置的数据,每台设备都有不同的新数据
  • 重新开启网络
  • 等待更改传播

From the docs:

  

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

你这样做的方式(允许同步时间,以不同方式改变文档)似乎不应该引起冲突。

答案 1 :(得分:0)

iCloud与版本控制系统基本相同 - 除了您只能访问冲突版本(发生冲突时)。

当设备从iCloud中提取ver_1时,编辑,保存并查找服务器的版本(ver_2或更新版本)与预期不同,将会创建冲突的版本。

初始同步后,您可以:

  1. 关闭设备B上的wifi,编辑&保存。
  2. 在设备A上编辑,保存。
  3. 打开设备B上的wifi。
  4. 即将发生冲突。