【问题标题】:iCloud Drive cannot remove file created from other deviceiCloud Drive 无法删除从其他设备创建的文件
【发布时间】:2017-09-25 12:01:54
【问题描述】:

我正在尝试采用 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)

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

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

我如何才能从其他设备上删除任何文件,我是否遗漏了一些步骤?

【问题讨论】:

    标签: ios icloud-drive


    【解决方案1】:

    我确实遗漏了一些东西,在阅读了this question,尤其是this answer 之后,我发现即使NSMetadataQuery 正确返回了路径,也有可能该文件尚未下载到设备中,因此错误。

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

    【讨论】:

      猜你喜欢
      • 2017-08-20
      • 2014-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2015-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多