如何修正可选值以使我的代码正常运行

时间:2019-08-28 11:07:26

标签: ios swift

我需要校对人员检查此代码以告诉我哪里出了问题以及如何解决此错误,我正在尝试对Firebase数据库中的帐户进行身份验证,但是我遇到此代码错误。

- (void)createUserWithEmail:(nonnull NSString *)email
                   password:(nonnull NSString *)password
                 completion:(nullable FIRAuthDataResultCallback)completion;

我的FirAuth是Nil,正在抛出代码,数据库和存储也为空和空。

如何解决此问题以使我的代码正确运行。没有其他问题可以解决我的问题。我该如何解决?

@IBAction func signupBtn_TouchUpInside(_ sender: Any) {
        Auth.auth().createUser(withEmail: EmailTextField.text!, password: passwordTextField.text!, completion: { authResult, error in
            if (error != nil)  {
                  print(error!.localizedDescription)
                 }else{
                return
            }
 let uid = Auth.auth().currentUser?.uid
            let storageRef = Storage.storage().reference(forURL: "gs://tunnel-vision-d61a4.appspot.com/").child("profile_Image").child(uid!)
            let profileImg = self.selectedImage;  if let imageData = profileImg.jpegData(compressionQuality: 0.1) {
                storageRef.putData(imageData, metadata: nil, completion: { (Metadata, Error) in

2 个答案:

答案 0 :(得分:0)

我相信createUser是一个异步调用(它发生在后台),当成功创建用户后,它将触发FIRAuthDataResultCallback完成处理程序。这意味着任何依赖于此功能 的完成的代码都必须在完成处理程序内部运行。

您当前是在请求要创建的新用户后立即致电Auth.auth().currentUser?.uid,但不是在完成创建后立即打电话。这意味着大多数情况下,用户仍然是nil

尝试此操作,看看是否可以解决问题。您的示例中的括号不太一致,因此我已尽力假定它们的位置是:)

    @IBAction func signupBtn_TouchUpInside(_ sender: Any) {
        Auth.auth().createUser(withEmail: EmailTextField.text!, password: passwordTextField.text!, completion: { authResult, error in
            if (error != nil)  {
                  print(error!.localizedDescription)
            } else {
                  // The callback has been called and there is no error so we should _now_ have a user
                  let uid = Auth.auth().currentUser?.uid
                  ...
            }
         })
     }

答案 1 :(得分:0)

您可能想要确保使用在AppDelegate的Firebase门户中提供的令牌正确注册了Firebase