关闭QLPreviewController后如何删除文件?

时间:2018-10-18 11:58:31

标签: swift qlpreviewcontroller

我的应用程序要求以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目录也许更简单,但我不确定。

谢谢!

1 个答案:

答案 0 :(得分:0)

QLPreviewControllerDelegate可以通知您,如果您实现了适当的功能,则预览控制器何时/不处于关闭状态。

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

仅记得将委托设置为QLPreviewController

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