【问题标题】:Programmatically resolve NSDocument iCloud version conflicts?以编程方式解决 NSDocument iCloud 版本冲突?
【发布时间】:2014-01-26 11:42:06
【问题描述】:

我有一个内部使用 NSDocument 对象的 Mac“Shoebox”应用程序,但不向用户公开单个文档的概念。 (我依靠 NSDocument 让通过 iCloud 进行同步更容易。)

我的问题是,当出现版本冲突时,我的应用会显示默认的NSDocument 冲突解决警报(见下文),让用户选择一两个获胜者。

在我的应用程序的概念中,这没有意义。有没有办法拦截/防止该警报并以编程方式处理冲突?

我知道我可以用下面的代码检测版本冲突。但是,我仍然需要阻止警报表。

[NSFileVersion unresolvedConflictVersionsOfItemAtURL:document.fileURL];

冲突解决警报示例:

【问题讨论】:

    标签: cocoa icloud nsdocument icloud-api nsfileversion


    【解决方案1】:

    这是 NSDocument 发现存在未解决的版本冲突时的内置行为。如果您不想使用它,则必须放弃对 NSDocument 的支持并使用较低级别的抽象,例如 NSFileManager + NSFileVersion。

    【讨论】:

      【解决方案2】:

      您可以覆盖 + (BOOL)usesUbiquitousStorage 并返回 NO。 这将不再显示普遍性冲突面板。

      【讨论】:

        【解决方案3】:

        查看文档Resolving Document Version Conflicts

        解决文档版本冲突的策略

        您的应用程序可以采用以下三种策略之一来解决文档版本冲突:

        • 合并来自冲突版本的更改。
        • 选择其中一项 基于某些相关因素的文档版本,例如版本 最新的修改日期。
        • 允许用户查看 文档的冲突版本,然后选择要使用的版本。

        最好使用哪种策略很大程度上取决于您的文档数据。如果您可以在不引入矛盾元素的情况下合并不同文档版本的内容,那么请遵循该策略。或者,如果您的应用程序没有因此遭受任何数据丢失,请选择具有最新修改日期的文档版本。

        通常,您应该尝试在不涉及用户的情况下解决冲突,但对于某些可能无法实现的应用程序。如果应用程序采用以用户为中心的方法,它应该谨慎地通知用户版本冲突,并公开一个按钮或其他控件来启动解决过程。 An Example: Letting the User Pick the Version 检查允许用户选择要使用的文档版本的应用程序代码。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-07-02
          • 2018-10-26
          • 1970-01-01
          • 2017-10-03
          • 1970-01-01
          • 2019-01-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多