问题标签 [nsfileversion]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
268 浏览

icloud - 当 URL 报告 NSURLUbiquitousItemHasUnresolvedConflictsKey 为 true 但没有其他版本的 URL 时,这意味着什么?

为了测试冲突,我一直在两台设备上保存同一文档的两个不同版本。然后,在这两种设备上,我将能够查看currentVersionOfItemAtURL以查看“获胜”版本(在两种设备上都是相同的)以及otherVersionsOfItemAtURLorremoveOtherVersionsOfItemAtURL以查看其他设备。

但是我现在似乎有一个处于奇怪状态的文档,currentVersionOfItemAtURL两个设备上的位置不同,并且没有otherVersionsOfItemAtURLor removeOtherVersionsOfItemAtURL。使用getResourceValue:forKey:withNSURLUbiquitousItemHasUnresolvedConflictsKey报告 URL 存在未解决的冲突,但我无法看到它们。

当 URL 报告 NSURLUbiquitousItemHasUnresolvedConflictsKey 为 true 但没有其他版本的 URL 时,这意味着什么?这是我需要在生产应用程序中处理的情况吗?

0 投票
1 回答
332 浏览

cocoa - 自动创建冲突的 NSFileVersions

我编写了一个自定义冲突处理例程,它会自动启动以解决 NSFileVersion 的冲突版本。现在我想编写单元测试以确保它有效。这是问题:

如何在单元测试中导致/创建冲突版本?

这本质上归结为:如何在不通过 iCloud 手动执行的情况下引发冲突?由于这仅用于测试目的,我不在乎使用私有 API 或直接侵入系统——只要结果是从NSFileVersion's +unresolvedConflictVersionsOfItemAtURL. 任何建议将不胜感激!

最大限度

0 投票
0 回答
68 浏览

cocoa-touch - 方法 removeAndReturnError: 不需要吗?

我刚刚阅读了有关在 iCloud 中使用 UIDocuments 解决冲突的文档: 解决文档版本冲突

在“如何告诉 iOS 文档版本冲突已解决”一章的最后一点中写道:

删除文档的已解决版本。对于您不再需要的任何版本,调用 NSFileVersion 的 removeAndReturnError: 方法来回收文件的存储空间。文档修订保留在服务器上,直到您将其删除。

但在代码示例“清单 6-3”中,没有调用 removeAndReturnError: 方法。这种方法不是必需的还是我应该在哪里调用它?

谢谢你的帮助

利纳德

0 投票
3 回答
445 浏览

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

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

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

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

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

冲突解决警报示例:

冲突解决警报示例

0 投票
0 回答
163 浏览

icloud - iCloud:合并两个版本的文件包(共同祖先)的策略?

我有一个基于文档的应用程序(Mac 和 iOS),并试图找到一种在不打扰用户的情况下自动解决版本冲突的好方法。

我的文档实际上是一个文件包,其中包含许多以文本文件形式存储的小笔记。版本冲突最可能的情况是用户在每台设备上修改了不同的注释,因此我应该能够通过选择每个设备中最新的一个来合并它们。

但是,使用 NSFileVersion 我只能获得当前(最新)冲突版本,但我需要知道共同祖先的修改日期才能知道我可以使用注释而不会丢失更改。

示例流程:

综上所述,client 2 的版本将变为current,因为 note2.txt 是最近的保存操作。

在上述情况下,我不能简单地合并到最新版本的 note1.txt,因为我会丢失客户端 2 所做的更改(“foo”)。我需要首先查看客户端 2 的 note1.txt 并判断与共同祖先(“基础”)相比是否已修改。

这将是一个简单而优雅的解决方案,但我认为这不可能NSFileVersion单独完成,除非我错过了一些东西。

另一种方法是使用某种带有时间戳的事务日志,但这会使事情变得相当复杂......

0 投票
0 回答
170 浏览

objective-c - NSFileVersion:通过复制文件解决冲突

我有整个 Documents 文件夹的 NSFilePresenter。我曾经将文件放在 iCloud 容器中,如果文件在多个设备上同时创建,它们会被 iCloud 自动重命名。同时presentedSubitemAtURL:(didMoveToURL:会通知我在某些设备上创建的某些文件已重命名。这很重要,因为这是我知道 iCloud 自动移动文件的唯一方式。

但是,现在我开始自己解决冲突并实施- (void)presentedSubitemAtURL:(NSURL *)url didGainVersion:(NSFileVersion *)version,因为我并不总是希望 iCloud 简单地重命名文件,有时我想就地编写。

以与 iCloud 相同的方式将同一文件的冲突版本分离到两个文件的正确方法是什么?因此,如果两个设备同时写入file.txt,我希望将其中一个文件移动到file 2.txt.

到目前为止,我有选择最新版本文件的分辨率。