数据未插入Swift 3中Firebase中用户UID的节点下

时间:2017-05-25 07:01:29

标签: ios firebase swift3 firebase-realtime-database firebase-authentication

当我在userID下保存数据时,数据未存储到Firebase中并提供错误unexpectedly found nil while unwrapping an optional value,但是当我使用childByAutoID时,数据已成功存储。帮我保存在userID节点下。在这里,我已经解释过,当我在注册操作下创建用户时,这种情况正在发生。

@IBAction func createAccountAction(_ sender: Any) {

    if self.emailTextField.text == "" || self.passwordTextField.text == "" {
        let alertController = UIAlertController(title: "Error", message: "Please enter your email and password", preferredStyle: .alert) 
        let defaultAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)
        alertController.addAction(defaultAction) 
        present(alertController, animated: true, completion: nil)   
    } else if (self.passwordTextField.text != self.retypePasswordfield.text) {
        let alertController = UIAlertController(title: "Error", message: "Password does not match", preferredStyle: .alert)
        let defaultAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)
        alertController.addAction(defaultAction) 
        present(alertController, animated: true, completion: nil)
    } else {
        ref.child("user_registration").setValue(["username": self.fullName.text, "email": self.emailTextField.text,"contact": self.numberText.text, "city": self.myCity.text, "state": self.countryText.text, "gender": genderGroup, "blood": bloodGroup])

        FIRAuth.auth()?.createUser(withEmail: emailTextField.text!, password: passwordTextField.text!) { (user, error) in

            if error == nil {
                FIRAuth.auth()?.currentUser!.sendEmailVerification(completion: { (error) in
                })  
                print("You have successfully signed up")
                let alertController = UIAlertController(title: "Successful!", message: "Email Verification link sent", preferredStyle: .alert)
                let alertActionOkay = UIAlertAction(title: "Okay", style: .default) { (action) in
                    let vc = self.storyboard?.instantiateViewController(withIdentifier: "LoginFirstViewController")
                    self.present(vc!, animated: true, completion: nil)
                }
                alertController.addAction(alertActionOkay)
                self.present(alertController, animated: true, completion: nil)
            } else {
                let alertController = UIAlertController(title: "Error", message: error?.localizedDescription, preferredStyle: .alert)
                let defaultAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)
                alertController.addAction(defaultAction)
                self.present(alertController, animated: true, completion: nil)
            }
        }
    }
 }

1 个答案:

答案 0 :(得分:1)

仅供参考

这是我当前的工作代码

登录按钮

 // Create new User
            FIRAuth.auth()?.createUser(withEmail: self.tfEmail.text!, password: self.tfPassword.text!, completion: { (user, error) in

                if error == nil{ // IF NO ERROR

                    let astrContact = self.strDialCode + " " + self.tfMobileNumber.text!

                    // Dict to add user data in firebase Db
                    let aDBDict : [String : String] = ["userName": self.tfFullName.text!,
                                                       "userEmail": self.tfEmail.text!,
                                                       "userContact": astrContact,
                                                       "userCountry": self.strCode,
                                                       "userID": (user?.uid)!]


                    // Add data in DB
                    ref?.child("Customer/\(String(describing: (user?.uid)!)/userProfileDetails").setValue(aDBDict)

                    DispatchQueue.main.async(execute: { () -> Void in

                        // goto home VC
                        let storyboard = UIStoryboard(name: "Main", bundle: nil)
                        let navController = storyboard.instantiateViewController(withIdentifier: "MainController")

                        if let window = AppDelegate.getAppDelegate().window {
                            window.rootViewController = navController
                        }
                    })
                }
                else{ // If error in creating new user
                    print("error in creating new user")
                    print(error!)
                }
            })

在appDelegate

extension AppDelegate {

    class func getAppDelegate() -> AppDelegate {
        return UIApplication.shared.delegate as! AppDelegate
    }
}