我正在使用一个应用程序,用户创建一个帐户并将图像上传到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
}
)
谢谢!
答案 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)