iCloud 云盘无法移除从其他设备创建的文件



我正在尝试采用iCloud Drive来存储我的应用程序数据的备份,每个备份使用单个文件,如果相关,它们是具有自定义扩展名的简单XML文件。文件创建和上传工作正常,但是由于我现在尝试让用户手动删除备份,我发现我无法以编程方式删除文件,但是如果我从iOS上的应用程序或macOS上的Finder中的文件夹转到iCloud Drive,我可以做到这一点。

为了保存文件,我首先使用

FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents")

如果文档文件夹不存在,请创建,因为我希望用户能够在我上传文件的临时目录中本地创建文件后查看和编辑文件

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)

如果同一设备创建了文件,则它可以工作,但如果它来自另一个设备,则它总是失败,并且错误表明该文件在指定路径中不存在。

为了清楚起见,我已经删除了错误处理代码,但我已经测试了这种行为来检查抛出的错误。

如何从其他设备中删除任何文件,我是否缺少一些步骤?

我确实错过了一些东西,在阅读了这个问题,特别是这个答案后,我发现即使NSMetadataQuery正确返回路径也可能没有下载到设备,因此错误。

要正确删除文件,您必须模仿UIDocument的行为并在后台队列上使用NSFileCoordinator,请参阅前面引用的答案以了解实现详细信息。

最新更新