iOS:如何在iCloud中合并冲突的UIDocument?

时间:2013-02-14 22:39:32

标签: ios icloud uidocument

我无法理解合并iCloud中存储的UIDocument的2个或更多冲突版本的选项。在检测到文档冲突后,我目前使用removeOtherVersionsOfItemAtURL来保存文档数据的最新版本。但是,我想支持合并冲突的文件。

我发现的唯一资源和教程都提到了Core Data和持久存储进行合并,这些示例使用了SQLite之类的东西,我没有使用它们。就我而言,每个文档都是一个单独的文件。

背景:我的应用使用自定义NSObject子类(具有相关属性)来存储数据。它们在NSCoding内进行编码和解码(使用NSKeyedArchiver/NSKeyedUnarchiver + UIDocument)。我已经设置了我的应用程序以完全使用iCloud。它可以使文件无处不在,反之亦然,编辑和删除它们。

请帮助我了解如何合并有冲突的UIDocument's

1 个答案:

答案 0 :(得分:4)

您将使用NSFileVersion来获取该文件的冲突版本。当您进入冲突状态时,+unresolvedConflictVersionsOfItemAtURL会为任何不被视为“当前”的版本提供NSFileVersion个实例。然后,您可以使用URL的{​​{1}}属性来获取这些冲突版本的内容。

现在您有多个版本的文档。您如何解决冲突取决于您 - 通过冲突的版本并以对文档结构有意义的任何方式合并更改。如果您可以在代码中解决它,您可能会从其中一个冲突版本中获取一些数据并将其复制到当前版本,直到当前版本包含最终合并版本。

完成后,保存文档,删除冲突的版本(NSFileVersion),并将当前文件版本标记为已解决。您可能还想使用removeOtherVersionsOfItemAtURL:error:来实际删除旧版本。

有关详细信息,请参阅Apple's guide for resolving document version conflicts