2017-02-11 176 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

相關問題