【问题标题】:iOS: How can I merge conflicted UIDocument's in iCloud?iOS:如何在 iCloud 中合并有冲突的 UIDocument?
【发布时间】:2023-03-20 17:41:01
【问题描述】:

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

我发现的唯一资源和教程提到了用于合并的核心数据和持久存储,示例使用了 SQLite 之类的东西,我不使用。就我而言,每个文档都是一个单独的文件。

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

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

【问题讨论】:

    标签: ios icloud uidocument


    【解决方案1】:

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

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

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

    更多详情请见Apple's guide for resolving document version conflicts

    【讨论】:

    • 只是为了确认一下,没有办法让iOS自动确定如何合并更改?如果更改需要程序化合并,我想可能会有一点放缓......
    • 不,您的文档结构可以是任何东西,iOS 无法自动解决如何解决任意数据集合中的冲突。如果您使用的是 Core Data,它可能会尝试按属性解析。
    猜你喜欢
    • 2018-11-12
    • 2014-01-18
    • 2018-07-10
    • 2012-12-08
    • 2013-07-29
    • 2014-11-18
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    相关资源
    最近更新 更多