除了从FireBase显示的图像以外的所有数据

时间:2018-09-04 23:01:48

标签: ios swift firebase

我正在使用一个应用程序,用户创建一个帐户并将图像上传到Firebase数据库,然后该图像显示在配置文件页面上。似乎可以在数据库中很好地存储图像,但是配置文件页面没有检索图像以显示它。它会将所有其他信息传递到页面(电子邮件,用户名等),而不是个人资料照片。

这是用于获取要显示在个人资料页面上的数据的代码:

if let user = DataService.dataService.currentUser {
  username.text = user.displayName
  email.text = user.email
  if user.photoURL != nil {
    if let data = NSData(contentsOf: user.photoURL!){
      self.profileimage!.image = UIImage.init(data: data as Data)
    }
  }
}
else {
  // No user is signed in
}

这是将图像存储到Firebase中的代码:

let filepath = "profileimage/\(String(describing: Auth.auth().currentUser!.uid))"
let metadata = FirebaseStorage.StorageMetadata()
metadata.contentType = "image/jpeg"

self.storageRef.child(filepath).putData(data as Data, metadata: metadata, completion: {(metadata, error) in
  if let error = error {
    print ("\(error.localizedDescription)")
    return
  }
)

谢谢!

1 个答案:

答案 0 :(得分:0)

NSData(contentsOf:_)仅应用于本地文件路径,而不是基于网络的URL。 在此处详细了解原因:https://developer.apple.com/documentation/foundation/nsdata/1413892-init

我通常在UIImageView上创建一个扩展以从URL加载图像,这是一个示例:

extension UIImageView
{
    func loadImageUsingUrlString(_ urlString: String) {

        self.image = nil

        guard let url = URL(string: urlString) else { return }

        URLSession.shared.dataTask(with: url, completionHandler: { (data, response, error) in

            if let error = error {
                print(error)
                return
            }

            DispatchQueue.main.async(execute: {

                if let downloadedImage = UIImage(data: data!) {
                    self.image = downloadedImage
                }
            })
        }).resume()
    }
}

然后您可以在所需的imageView上调用它:

yourImageView.loadImageUsingUrlString(yourURL)