以编程方式解决NSDocument iCloud版本冲突?

时间:2014-01-08 11:35:56

标签: cocoa icloud nsdocument icloud-api nsfileversion

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

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

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

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

[NSFileVersion unresolvedConflictVersionsOfItemAtURL:document.fileURL];

冲突解决警报示例:

Example conflict resolution alert

3 个答案:

答案 0 :(得分:0)

这是NSDocument在发现存在未解决的版本冲突时的内置行为。如果你不想使用它,你将不得不放弃对NSDocument的支持,并使用像NSFileManager + NSFileVersion这样的低级抽象。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

查看文档 Resolving Document Version Conflicts

解决文档版本冲突的策略

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

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

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

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