我的应用程序要求以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目录也许更简单,但我不确定。
谢谢!
答案 0 :(得分:0)
QLPreviewControllerDelegate
可以通知您,如果您实现了适当的功能,则预览控制器何时/不处于关闭状态。
optional func previewController{Will/Did}Dismiss(_ controller: QLPreviewController)
仅记得将委托设置为QLPreviewController
:
let preview = QLPreviewController()
preview.dataSource = self
preview.delegate = self