removeAndReturnError: 方法不是必须的吗?

问题描述 投票:0回答:1

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

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

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

但是在代码示例“清单6-3”中没有调用removeAndReturnError:方法。 这个方法是不是没有必要或者应该在哪里调用?

感谢您的帮助

利纳德

cocoa-touch icloud conflict uidocument nsfileversion
1个回答
0
投票

removeAndReturnErrorremoveOtherVersionsOfItemAtURL 是释放 iCloud 存储空间所必需的。

清单6-3中的以下行删除了除当前版本之外的所有版本,而不是removeAndReturnError:。

[NSFileVersion removeOtherVersionsOfItemAtURL:_document.fileURL error:nil];

但是,清单 6-3 的代码似乎有点奇怪。因为removeOtherVersionsOfItemAtURL:删除所有版本,所以下一行的unresolvedConflictVersionsOfItemAtURL:总是返回一个空数组,然后循环内部(fileVersion.resolved = YES;)永远不会执行。

我在应用程序中的代码是这样的。我不确定在删除“已解决”属性之前是否有必要将其设置为 YES,但我认为这可能更安全。

NSArray* conflictVersions = [NSFileVersion unresolvedConflictVersionsOfItemAtURL:fileURL];
for (NSFileVersion* fileVersion in conflictVersions) {
    fileVersion.resolved = YES;
    NSError* error = nil;
    [fileVersion removeAndReturnError:&error];
}
  • NSFileCoordinator 操作在这段代码中被省略,但实际上是需要的,如Apple 文档中所述。
© www.soinside.com 2019 - 2024. All rights reserved.