【问题标题】:can't download user profile image from FIRStorage无法从 FIRStorage 下载用户个人资料图片
【发布时间】:2018-12-26 10:42:37
【问题描述】:

当用户转到用户配置文件选项卡时,他在应用程序中遇到错误并崩溃,我在 URLSession.shared.dataTask 中的 Xcode 中遇到错误

func setupProfile(){

    if Auth.auth().currentUser?.uid == nil{

        logout()
    }else{

        usrnNameButton.isHidden = false
        let uid = Auth.auth().currentUser?.uid
        databaseRef.child("Users").child(uid!).observeSingleEvent(of: .value,
                                                                  with: { snapshot in

            if let dict = snapshot.value as? [String: AnyObject]
            {


                if let profileImageuRL = dict["pic"] as? String
                {
                    let url = URL(string: profileImageuRL)
                    URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in
                        if error != nil {
                            print(error!)
                            return
                        }

                        DispatchQueue.main.async {
                            self.PP.image = UIImage(data: data!)
                        }

                    }).resume()
                }
                if let coverImageuRL = dict["CoverPic"] as? String
                {
                    let url = URL(string: coverImageuRL )
                    URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in
                        if error != nil {
                            print(error!)
                            return
                        }

                        DispatchQueue.main.async {
                            self.coverPic.image = UIImage(data: data!)
                        }

                    }).resume()
                }
            }
        })
    }
}

这是我设置用户数据的代码
这样任何人都可以帮助我 谢谢

【问题讨论】:

  • 我的建议是,当您从 URL 获取图像时,请使用 Kingfisher pod。它只是为你省去了很多麻烦,而且他使用缓存,这样下次你就不会再次下载相同的图像,它还可以在下载你需要的图像时显示一个占位符图像,这一切都发生在后台线程上。简直不能更好。试试看:github.com/onevcat/Kingfisher
  • 你好,谢谢重播
  • 如果可以的话,你可以编辑我的代码

标签: swift xcode firebase firebase-storage


【解决方案1】:

Xcode 8 • Swift 3

如果需要,使用它来下载图像

func downloadImage(url: URL) {
    print("Download Started")
    getDataFromUrl(url: url) { data, response, error in
        guard let data = data, error == nil else { return }
        print(response?.suggestedFilename ?? url.lastPathComponent)
        print("Download Finished")
        DispatchQueue.main.async() {
            self.imageView.image = UIImage(data: data)
        }
    }
}

用法:

    if let url = URL(string: "http://www.apple.com/euro/ios/ios8/a/generic/images/og.png") {
          downloadImage(url: url)
    }

【讨论】:

    【解决方案2】:

    您好,感谢您的重播,现在我们修复了错误,当我们按下配置文件选项卡时应用程序仍在运行,但配置文件图像没有给我一个空图像 {func setupProfile(){

        if Auth.auth().currentUser?.uid == nil{
    
            logout()
        }else{
            let changeRequest = Auth.auth().currentUser?.createProfileChangeRequest()
             //userName.text = changeRequest?.displayName
            usrnNameButton.isHidden = false
            let uid = Auth.auth().currentUser?.uid
            databaseRef.child("Users").child(uid!).observeSingleEvent(of: .value,
                                                                      with: { snapshot in
    
                if let dict = snapshot.value as? [String: AnyObject]
                {
    
    
                    if let profileImageuRL = dict["pic"] as? String
                    {
    
                        //let url = URL(string: profileImageuRL)
    
                            //self.downloadImage(url: url!)
    
                                //self.PP.image = UIImage(data: data!)
                        //let resource = ImageResource(downloadURL: profileImageuRL, cacheKey: profileImageuRL)
                        self.PP.kf.setImage(with: profileImageuRL as? Resource)
    
                    }
                    if let coverImageuRL = dict["CoverPic"] as? String
                    {
                        self.coverPic.kf.setImage(with: coverImageuRL as? Resource)
                    }
                }
            })
        }
    }
    

    }

    你可以看到的个人资料标签图像[https://i.stack.imgur.com/g4ENe.jpg][1] 再次感谢您

    【讨论】:

    • 这一行错误:self.PP.kf.setImage(with: profileImageuRL as?Resource) 应该是'self.PP.kf.setImage(with: URL(profileImageuRL)!)'跨度>
    • 另外,请确保您的 profileImageuRL 是实际链接。打印出来看看你的 dict["pic"] 返回什么?
    猜你喜欢
    • 1970-01-01
    • 2017-11-20
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-06
    • 1970-01-01
    • 2017-09-12
    相关资源
    最近更新 更多