2016-11-30 59 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"]; 

这也将避免的问题,“在模拟器上工作,但在设备上不起作用”反之亦然。

相关问题