这是我的代码:
let destination = DownloadRequest.suggestedDownloadDestination(for: .documentDirectory)
_ = Alamofire.download("http://www.sample.com/images/sample.png", to: destination)
let documentsDirectory = FileManager.SearchPathDirectory.documentDirectory
let userDomainMask = FileManager.SearchPathDomainMask.userDomainMask
let paths = NSSearchPathForDirectoriesInDomains(documentsDirectory, userDomainMask, true)
if let dirPath = paths.first {
let imageURL = URL(fileURLWithPath: dirPath).appendingPathComponent("sample.png")
if let image = UIImage(contentsOfFile: imageURL.path) {
self.sampleImage.image = image
}
}
我第一次运行此代码时,图像为零;所以我在下载时设置断点,刚刚超过下载代码,检查磁盘上的目录并且图像尚未保存到文件中(这就是图像为零的原因)。运行UIViewContoller
类中的所有代码后,文件已成功保存到磁盘,第二次导航到ViewController时,图像已加载。
有没有办法下载图像,立即将其保存到磁盘,然后立即显示图像?
我已尝试将下载代码放在viewWillAppear
中,并将负载放在viewDidLoad
中的磁盘代码中。我还尝试使用完成块创建一个方法,并将下载代码放在完成块中。
答案 0 :(得分:1)
Alamofire.download函数是异步的,因此它将开始下载,您的代码将继续立即执行。
您应该使用函数处理程序在下载文件后立即对其进行操作。
Alamofire.download("http://www.sample.com/images/sample.png", to: destination).responseData { response in
if let data = response.result.value {
let documentsDirectory = FileManager.SearchPathDirectory.documentDirectory
let userDomainMask = FileManager.SearchPathDomainMask.userDomainMask
let paths = NSSearchPathForDirectoriesInDomains(documentsDirectory, userDomainMask, true)
if let dirPath = paths.first {
let imageURL = URL(fileURLWithPath: dirPath).appendingPathComponent("sample.png")
if let image = UIImage(contentsOfFile: imageURL.path) {
self.sampleImage.image = image
}
}
}
}