2017-02-11 2 views
0

App mit einem Fahrer und einem Treiber. Wenn Sie sich als Fahrer registrieren und dann eine Fahrt vom Fahrer anfordern, stürzt die App ab. Aber wenn der Fahrer ein Konto hat oder sich anmeldet und abmeldet und sich dann in der App anmeldet, kann der Fahrer eine Fahrt anfordern, ohne die App zu stürzen.App stürzt nach der Anmeldung und eine Anfrage - swift

Anmelden Aktion

@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) 
      } 
     } 
    }) 

} 

Anfrage Ryde

// ... 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 

** Fehler bei der Anwendung abstürzt - **

error

fatal error: unexpectedly found nil while unwrapping an Optional value 

Ich habe versucht, in der login() Funktion nach der Anmeldung setzen(), aber nichts scheint zu funktionieren.

Anmeldung

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) 
     } 
    }) 

} 

Jede Hilfe willkommen wäre stark

+0

@Mungbeans hilft Ja, ich habe, aber ich verstehe nicht, wenn ich es bin der Anmeldung, Dann sollte sich der Benutzer entsprechend meinem Code anmelden, ist es aber nicht. – LizG

+0

Immer noch kein Ergebnis - Änderungsanforderung eingeben, aber immer noch Absturz bei: currUsername = (FIRAuth.auth()?. CurrentUser? .displayName)! - Edited signUp() in Post – LizG

+0

kann jemand Hilfe anbieten? – LizG

Antwort

0

Ich habe versucht, herauszufinden, wie die persistente Anmeldung zulassen und scheint dieses Problem stattdessen zu beheben.

Um dieses Problem zu beheben, legen Sie die Benutzerstandardwerte für Benutzername und Kennwort fest. Nach der Registrierung oder Anmeldung wird der Benutzer dann zum Anmeldebildschirm zurückgeleitet, um sich anzumelden.

@IBAction Fonds 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) 

Hope this jemand anderes ...

0

Wenn u haben unterschrieben u nicht Setup profileChangeRequest tat display oder photoURL hinzuzufügen, so dass Ihr display null ist.

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

Wie kann das tun? – LizG

+0

Aktualisierte Antwort, wenn du mehr Erklärung benötigst, bin ich glücklich zu helfen. – Aragunz

+0

Großartig, danke, aber wo platziere ich das? – LizG

Verwandte Themen