【问题标题】:App crashing when trying to change profile photo尝试更改个人资料照片时应用程序崩溃
【发布时间】:2019-11-09 00:27:08
【问题描述】:

我正在处理我的应用程序的编辑配置文件部分。当我尝试更改和更新用户个人资料照片时。应用程序崩溃,我收到此错误

reason: 'URL scheme must be one of gs://, http://, or https://

当我创建新的个人资料并添加个人资料照片或上传照片时,它可以正常工作,但是当我尝试更改个人资料照片时,我得到了这个。它会首先删除个人资料照片并进行更新(当用户没有照片时,图像视图会显示为灰色),然后当我再次尝试重新更改照片时,它会崩溃。

这是我的代码。

func updateProfileImage() {
        guard imageChanged == true else { return }
        guard let currentUid = Auth.auth().currentUser?.uid else { return }
        guard let user = self.user else { return }

        Storage.storage().reference(forURL: user.profileImageUrl).delete(completion: nil)

        let filename = NSUUID().uuidString

        guard let updatedProfileImage = profileImageView.image else { return }

        guard let imageData = updatedProfileImage.jpegData(compressionQuality: 0.3) else { return }

        STORAGE_PROFILE_IMAGES_REF.child(filename).putData(imageData, metadata: nil) { (metadata, error) in

            if let error = error {
                print("Failed to upload image to storage with error: ", error.localizedDescription)
            }

            STORAGE_PROFILE_IMAGES_REF.downloadURL(completion: { (url, error) in
                USER_REF.child(currentUid).child("profileImageUrl").setValue(url?.absoluteString, withCompletionBlock: { (err, ref) in

                    guard let userProfileController = self.userProfileController else { return }
                    userProfileController.fetchCurrentUserData()

                    self.dismiss(animated: true, completion: nil)
                })
            })
        }
    }
}



【问题讨论】:

  • 究竟是哪一行引发了该错误?
  • @FrankvanPuffelen 嗨,弗兰克,它没有给我一条线......只是一个完整的崩溃并将我带到 AppDelegate。如果这有意义

标签: swift firebase firebase-realtime-database firebase-storage


【解决方案1】:

您首先检查 URL 是否有效或未使用 保护

  guard let urlis = yourUrl else{
  // url is nill.
      return
      }
if let url = NSURL(string: urlis) {
  // your image code  
  }
else{
  // url is invalid.
  return
  }

添加异常断点:这个快速提示将为您节省大量调试时间!所以 Xcode 会在异常被捕获的地方停止。

在你的项目中,进入Breakpoint Navigator,点击'+'按钮和'Add Exception Breakpoint...'

【讨论】:

  • 抱歉回复晚了。现在要试试这段代码。
  • 想通了。我需要确保我使用 url 的非可选值,换句话说:guard let imageUrl = url?.absoluteString else { return } 我会接受你的答案,因为它是同一件事,让我走上正确的轨道在哪里看!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
  • 2023-04-04
  • 2017-02-06
相关资源
最近更新 更多