我刚刚阅读了有关 iCloud 中 UIDocuments 冲突解决的文档: 解决文档版本冲突
在“如何告诉iOS文档版本冲突已解决”一章的最后一点写道:
删除文档的已解决版本。 对于不再需要的任何版本,请调用 NSFileVersion 的removeAndReturnError:方法来回收文件的存储空间。文档修订版本保留在服务器上,直到您将其删除。
但是在代码示例“清单6-3”中没有调用removeAndReturnError:方法。 这个方法是不是没有必要或者应该在哪里调用?
感谢您的帮助
利纳德
removeAndReturnError 或 removeOtherVersionsOfItemAtURL 是释放 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];
}