我尝试采用iCloud Drive为每个备份使用单个文件存储我的应用程序数据的备份,如果它们相关,则它们是具有自定义扩展的简单XML文件。文件创建和上传工作正常但是我现在试图让用户手动删除备份我发现我无法以编程方式删除文件但是如果我从iOS上的应用程序转到iCloud Drive或者我可以这样做MacOS上Finder中的文件夹。
要保存文件,我首先使用
检索容器的根目录FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents")
并创建 Document 文件夹,如果它不存在,因为我希望用户能够查看和编辑文件,在临时目录中本地创建文件后我上传它与
let file = FileManager.default
if file.fileExists(atPath: remotePath.path) {
try? file.removeItem(at: remotePath)
}
try? file.setUbiquitous(true, itemAt: localPath, destinationURL: remotePath)
其中remotePath
是之前检索的路径,附加了文件名。要加载文件,我使用NSMetadataQuery
并在每个返回的项目上获取NSMetadataItemURLKey
的每个文件的路径,这样工作正常但是当我尝试
try? FileManager.default.removeItem(at: retrievedPath)
如果同一设备创建了该文件,但是如果它来自另一个设备,它总是会失败并且错误表明该文件在指定路径中不存在。
为清楚起见,我已删除了错误处理代码,但我已检测过此行为,检查抛出的错误。
如何从其他设备删除任何文件,我错过了一些步骤吗?
答案 0 :(得分:0)
我确实遗漏了一些东西,在阅读this question之后,特别是this answer,我发现即使NSMetadataQuery
正确返回路径,也可能是文件尚未下载到设备,因此错误。
要正确删除文件,您必须模仿UIDocument
的行为并在后台队列上使用NSFileCoordinator
,请参阅之前引用的答案以获取实施细节。