ios - iCloud Drive 无法删除从其他设备创建的文件

标签 ios icloud-drive

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

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

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

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

最佳答案

读完this question后,我确实错过了一些东西,特别是this answer ,我发现即使 NSMetadataQuery 正确返回路径,文件也可能尚未下载到设备,因此出现错误。

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

关于ios - iCloud Drive 无法删除从其他设备创建的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43662060/

相关文章:

ios - 为什么我的应用程序没有显示在 iCloud Drive 文件夹中

ios - 将文件保存在 iCloud Drive 文档中(用户访问)

ios - 使用 Cordova/PhoneGap 模拟器命令模拟 iPad

android - 适用于 Android 和 iOS 的无服务器嵌入式 noSQL

ios - 当我通过设置登录时 FBSessionStateClosedLoginFailed

ios - 具有动态 header 的 UICollectionViewController(如 Reddit 应用程序)

Swift 将文档文件写入/保存/移动到 iCloud 驱动器

ios - 在 MFMailComposeViewController 的 messageBody 中查找字符串

apache - 403 禁止 : Apache not working after moving document root folder to iCloud drive

swift - iOS 15 中的文档浏览器应用不断创建 iCloud 驱动器文件夹