【问题标题】:How to remove file after QLPreviewController is dismissed?QLPreviewController 关闭后如何删除文件?
【发布时间】:2019-03-23 05:32:00
【问题描述】:

我的应用需要下载并显示 QLPreviewController 中的文件。在某些情况下,这些文件必须是临时的,即用户完成 QLPreviewController 后,应该从内部存储中删除文件。

我试图调用一个完成块来删除这些文件,如下代码所示:

func launchPreview(QLpreviewItem: QLPreviewItem, completion: @escaping () -> Void) {
    previewItem = QLpreviewItem
    let previewController = QLPreviewController()
    previewController.dataSource = self
    self.present(previewController, animated: true, completion: {
        completion()
    })
}

完成块看起来像这样,它工作正常:

if fileManager.fileExists(atPath: path) {
    try! fileManager.removeItem(atPath: path)
}

这种方法的问题是当用户尝试在 previewController 上共享文件时...它在预览控制器上显示后被删除,因此不可用。

previewController 关闭后有什么方法可以执行代码吗?

或者,如何将文件存储在临时目录中?在 iOS 上可以吗?

我正在使用以下代码下载并保存我的文件:

let destination: DownloadRequest.DownloadFileDestination = { _, _ in
    let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] //path
    let fileURL = documentsURL.appendingPathComponent(attachment.name) //url
    return (fileURL, [.createIntermediateDirectories])
}

Alamofire.download(RestHelper.apiV1 + "/attachments/\(attachment.id)", to: destination).response { response in
    //Some code here
}

也许将目标更改为 tmp 目录更简单,但我不确定。

谢谢!

【问题讨论】:

    标签: swift qlpreviewcontroller


    【解决方案1】:

    QLPreviewControllerDelegate 可以在您实现适当的功能时通知您预览控制器将/确实关闭。

    optional func previewController{Will/Did}Dismiss(_ controller: QLPreviewController)
    

    记得在QLPreviewController上设置代理:

    let preview = QLPreviewController()
    preview.dataSource = self
    preview.delegate = self
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多