2017-03-03 39 views
0

这是我的代码: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

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 
      } 
     } 
    } 
} 
+0

完美!谢谢你的帮助! – Sicypher