Alamofire不会立即将图像保存到磁盘

时间:2017-03-03 23:27:59

标签: ios swift alamofire

这是我的代码:

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中的磁盘代码中。我还尝试使用完成块创建一个方法,并将下载代码放在完成块中。

1 个答案:

答案 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
            }
        }
    }
}