2017-02-11 71 views
0

使用骑手和驱动程序的应用程序。当作为骑手注册帐户,然后向司机请求搭车时,应用程序崩溃。但是,如果骑手拥有帐户或注册并注销并登录到应用程序,骑手可以请求骑行而不会崩溃应用程序。应用程序在注册并提出请求后崩溃 - swift

会员注册行动

@IBAction func signUpAction(_ sender: AnyObject) { 

    let usernameTxt = usersnameTextField.text 
    let cellTxt = cell.text 

    if let email = emailTextField.text, let password = passwordTextField.text, 
     (email.characters.count > 0 && password.characters.count > 0 && (usernameTxt?.characters.count)! > 0 && (cellTxt?.characters.count)! > 0) { 

     let data = UIImageJPEGRepresentation(self.userImageView.image!, 0.8) 

     rAuthService.instance.signUp(email, usersname: usernameTxt!, password: password, cell: cellTxt!, data: data!) { (error, data) in 


      if error != nil { 
       self.alertTheUser(title: "Login Error", message: "Unable to Create User") 

       // 
      } else if FIRAuth.auth()!.currentUser != nil { 

       rRydeHandler.Instance.rider = self.emailTextField.text! 

       let storyboard = UIStoryboard(name: "Rider", bundle: nil) 
       let tabBar = storyboard.instantiateViewController(withIdentifier: "Home") as! UITabBarController 
       self.present(tabBar, animated: true, completion: nil) 

       self.performSegue(withIdentifier: self.RIDER_SEGUE, sender: nil) 
      } 
     } 

    } else { 
     self.alertTheUser(title: "Email and Password Required", message: "Please enter a valid email & password") 
    } 

} // signUpAction func 

rAuthService.instance.signUp-- EDITED

// 1 ... Creating the User (Sign Up) 

func signUp(_ email: String, usersname: String, password: String, cell: String, data: Data!, loginHandler: LoginHandler?) { 

    FIRAuth.auth()?.createUser(withEmail: email, password: password, completion: { (user, error) in 

     if error != nil { 

      // Create a change request 
      let changeRequest = FIRAuth.auth()?.currentUser?.profileChangeRequest();    changeRequest?.displayName = usersname 

      // Commit profile changes to server 
      changeRequest?.commitChanges() { (error) in 


       if error != nil { 

        return 
       } 
      } 

      // Show error to user 
      self.handleFirebaseErrors(err: error as! NSError, loginHandler: loginHandler) 

     } else { // success creating user 

      if user?.uid != nil { // if there is a valid user id 

       // Store user to database 
       self.setUserInfo(user, usersname: usersname, email: email, password: password, cell: cell, data: data!) 

       // Log In the user 
       self.login(email: email, password: password, loginHandler: loginHandler) 
      } 
     } 
    }) 

} 

请求莱德

// ... Request Ryde 
func requestRyde(latitude: Double, longitude: Double, destLat: Double, destLong: Double, currentAddress: String, destAddress: String) { 

    let ref = FIRDatabase.database().reference() 

    currUserid = (FIRAuth.auth()?.currentUser?.uid)! 
    currUsername = (FIRAuth.auth()?.currentUser?.displayName)! 

    let newRequest = RideRequest(userId: currUserid, username: currUsername, latitude: latitude, longitude: longitude, destLat: destLat, destLong: destLong, currentAddress: currentAddress, destAddress: destAddress, active: true) 

    ref.child("drivers").child("RideRequests").child(currUsername).setValue(newRequest.toAnyObject()) 

} // request ryde func 

**错误,当应用程序崩溃 - **

error

fatal error: unexpectedly found nil while unwrapping an Optional value 

我试过)将在login()函数注册(后但似乎没有任何工作。

登录

func login(email: String, password: String, loginHandler: LoginHandler?) { 

    FIRAuth.auth()?.signIn(withEmail: email, password: password, completion: { (user, error) in 

     if error != nil { 
       self.handleFirebaseErrors(err: error as! NSError, loginHandler: loginHandler) 
     } else { 
      loginHandler?(nil, nil) 
     } 
    }) 

} 

任何帮助,将不胜感激

+0

@Mungbeans是的,我没有,但我不,如果我签约理解,它那么应该根据我的代码登录用户,但事实并非如此。 – LizG

+0

仍然没有结果 - 放入更改请求,但仍然遇到:currUsername =(FIRAuth.auth()?。currentUser?.displayName)! - 在 – LizG

+0

后编辑signUp()任何人都可以提供任何帮助? – LizG

回答

0

我试图找出如何允许持久登录,似乎修复这个问题,而不是。

要解决这个问题,请设置用户名和密码的默认值,然后一旦注册或注册,用户将被引导回登录屏幕进行登录。

@IBAction基金signUpAction()

UserDefaults.standard.set(self.emailTextField.text, forKey: "emailTextField") 
       UserDefaults.standard.set(self.passwordTextField.text, forKey: "passwordTextField") 
       UserDefaults.standard.synchronize() 

       // switch to Login Page 

       let myAlert = UIAlertController(title: "Alert", message: "Sign Up is complete, You can now Log In!", preferredStyle: .alert) 
       let ok = UIAlertAction(title: "OK", style: .default) { action in 
        self.dismiss(animated: true, completion: nil) 
       } 

       myAlert.addAction(ok) 
       self.present(myAlert, animated: true, completion: nil) 

希望这可以帮助其他人...

0

当U签署了ü没有设置profileChangeRequest添加显示名或photoURL,所以你的显示名是空的。

func signUp(_ email: String, usersname: String, password: String, cell: String, data: Data!, loginHandler: LoginHandler?) { 

    FIRAuth.auth()?.createUser(withEmail: email, password: password, completion: { (user, error) in 

     if error != nil { 

// Create a change request 
     let changeRequest = FIRAuth.auth()?.currentUser?.profileChangeRequest() 
changeRequest?.displayName = username 

      // Commit profile changes to server 
      changeRequest?.commitChanges() { (error) in 


       if let error = error { 

       return 
       } 
      // Show error to user 
      self.handleFirebaseErrors(err: error as! NSError, loginHandler: loginHandler) 

     } else { // success creating user 

      if user?.uid != nil { // if there is a valid user id 

       // Store user to database 
       self.setUserInfo(user, usersname: usersname, email: email, password: password, cell: cell, data: data!) 

       // Log In the user 
       self.login(email: email, password: password, loginHandler: loginHandler) 
      } 
     } 
    }) 

} // Sign Up func 
+0

如何做到这一点? – LizG

+0

更新的答案,如果你需要更多的解释我很乐意协助。 – Aragunz

+0

非常好,谢谢,但我在哪里放置? – LizG

相关问题