2016-11-30 45 views
0

我嘗試使用Firebase存儲功能,但無法在imageview中顯示下載的圖像。下載成功但沒有顯示。如果我使用它顯示的資產中的圖片。爲什麼這不起作用?Swift 3:從Firebase下載的圖片並保存到本地存儲中,但未顯示在應用程序中

DownloadViewController:

import UIKit 
import FirebaseStorage 
import Firebase 

@objc(DownloadViewController) 
class DownloadViewController: UIViewController { 

@IBOutlet weak var imageView: UIImageView! 
@IBOutlet weak var statusTextView: UITextView! 
var storageRef: FIRStorageReference! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    storageRef = FIRStorage.storage().reference() 

    let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) 
    let documentsDirectory = paths[0] 
    let filePath = "file:\(documentsDirectory)/myimage.jpg" 
    let storagePath = UserDefaults.standard.object(forKey: "storagePath") as! String 

    // [START downloadimage] 
    storageRef.child(storagePath).write(toFile: URL.init(string: filePath)!, 
             completion: { (url, error) in 
              if let error = error { 
               print("Error downloading:\(error)") 
               self.statusTextView.text = "Download Failed" 
               return 
              } 

              self.statusTextView.text = "Download Succeeded!" 
              print("filepath: "+filePath) 
              let image = UIImage.init(contentsOfFile: filePath) 
              self.imageView.image = image 
              self.imageView.layoutIfNeeded() 
              self.imageView.clipsToBounds = true 

    }) 
    // [END downloadimage] 

} 
} 
+0

在將圖像寫入文件之前,您不應下載圖像嗎?對我而言,您很難將其寫入Firebase存儲並在Firebase存儲中下載網址的內容。 –

回答

0

試着在你的功能塊,像這樣的末尾添加.resume:

})恢復

+0

現在,它給出了相同的結果。然而,我發現部分:UIImage.init(contentsOfFile:filePath)= nil。你知道那是爲什麼嗎? –

0

我這裏假設的問題是,你的文件沒有按」 t存在:

let filePath = "file:\(documentsDirectory)/myimage.jpg" 

可能不會解析到正確的用戶文件direc保守黨,你應該使用類似(原諒的OBJ-C,已經回答了它這個問題):

NSURL *tmpDirURL = [NSURL fileURLWithPath:NSTemporaryDirectory()]; 
NSURL *fileURL = [[tmpDirURL URLByAppendingPathComponent:@"hello"] URLByAppendingPathExtension:@"txt"]; 

這也將避免的問題,「在模擬器上工作,但在設備上不起作用」反之亦然。

相關問題