8

Ich versuche Fehler hinzufügen Umgang mit Benutzertaste in iOS-Projekt mit schnellen und Feuerbasis zu schaffen:Behandlung Fehler in New Firebase und Swift

Hier ist der Code für die Schaltfläche:

 @IBAction func Register(sender: AnyObject) { 

    if NameTF.text == "" || EmailTF.text == "" || PasswordTF.text == "" || RePasswordTF == "" || PhoneTF.text == "" || CityTF.text == "" 
    { 
     let alert = UIAlertController(title: "عذرًا", message:"يجب عليك ملىء كل الحقول المطلوبة", preferredStyle: .Alert) 
     alert.addAction(UIAlertAction(title: "نعم", style: .Default) { _ in }) 
     self.presentViewController(alert, animated: true){} 

    } else { 

     if PasswordTF.text != RePasswordTF.text { 
      let alert = UIAlertController(title: "عذرًا", message:"كلمتي المرور غير متطابقتين", preferredStyle: .Alert) 
      alert.addAction(UIAlertAction(title: "نعم", style: .Default) { _ in }) 
      self.presentViewController(alert, animated: true){} 

     } else { 


      FIRAuth.auth()?.createUserWithEmail(EmailTF.text!, password: PasswordTF.text!, completion: { user, error in 
       print(error) 

       if error != nil { 

        let errorCode = FIRAuthErrorNameKey 

        switch errorCode { 
        case "FIRAuthErrorCodeEmailAlreadyInUse": 
         let alert = UIAlertController(title: "عذرًا", message:"الإيميل مستخدم", preferredStyle: .Alert) 
         alert.addAction(UIAlertAction(title: "نعم", style: .Default) { _ in }) 
         self.presentViewController(alert, animated: true){} 

        case "FIRAuthErrorCodeUserNotFound": 
         let alert = UIAlertController(title: "عذرًا", message:"المستخدم غير موجود", preferredStyle: .Alert) 
         alert.addAction(UIAlertAction(title: "نعم", style: .Default) { _ in }) 
         self.presentViewController(alert, animated: true){} 

        case "FIRAuthErrorCodeInvalidEmail": 
         let alert = UIAlertController(title: "عذرًا", message:"الإيميل غير صحيح", preferredStyle: .Alert) 
         alert.addAction(UIAlertAction(title: "نعم", style: .Default) { _ in }) 
         self.presentViewController(alert, animated: true){} 

        case "FIRAuthErrorCodeNetworkError": 
         let alert = UIAlertController(title: "عذرًا", message:"خطأ في الاتصال بالانترنت", preferredStyle: .Alert) 
         alert.addAction(UIAlertAction(title: "نعم", style: .Default) { _ in }) 
         self.presentViewController(alert, animated: true){} 

        default: 
         let alert = UIAlertController(title: "عذرًا", message:"خطأ غير معروف", preferredStyle: .Alert) 
         alert.addAction(UIAlertAction(title: "نعم", style: .Default) { _ in }) 
         self.presentViewController(alert, animated: true){} 



        } 


       } else { 

        FIRAuth.auth()?.signInWithEmail(self.EmailTF.text!, password: self.PasswordTF.text!, completion: { (user: FIRUser?, error: NSError?) in 
         if let error = error { 
          print(error.localizedDescription) 
         } else { 

          self.ref.child("UserProfile").child(user!.uid).setValue([ 
           "email": self.EmailTF.text!, 
           "name" : self.NameTF.text!, 
           "phone": self.PhoneTF.text!, 
           "city" : self.CityTF.text!, 
           ]) 
          print("Sucess") 
          // self.performSegueWithIdentifier("SignUp", sender: nil) 

         } 
        }) 

       } //else 
      }) 

     } //Big else 


    } //Big Big else 
} 


}//end of 

I‘ Ich bin mir nicht sicher, ob die Syntax der Fehler in der switch-Anweisung korrekt ist oder nicht!

Weil, wenn ich es im Simulator getestet habe, gibt es mir immer den defualt Fall, der unbekannter Fehler ist! + konnte ich nicht die Syntax in der Dokumentation: https://firebase.google.com/docs/auth/ios/errors

Also, was die korrekte Syntax ist hinzuzufügen Fehlerbehandlung mit neuer Feuerbasis und schnell!

+0

Randnotiz - Sie sollten nicht groß verwenden 'if-else' Aussagen. Sie können in Ihrem Code wirklich verwirrend sein. Machen Sie einfach etwas wie folgt: 'if NameFT.text ==" "... {return}' Mit dem 'return' stoppen Sie die weitere Ausführung. Für mehr, überprüfen Sie [diese Frage SO] (http://stackoverflow.com/questions/37899049/where-does-this-line-of-code-return-to/37899267#37899267) – penatheboss

Antwort

18

Ich habe eigentlich schon ziemlich lange damit zu kämpfen gehabt und festgestellt, was das Problem war. Ich habe den Code ausprobiert, der oben in einer Antwort geschrieben wurde, und die error.code-Zeile gab mir einen Fehler. Es hat jedoch mit error._code funktioniert. Mit anderen Worten, Kredit für die ursprüngliche Antwort an Paul mit einer leichten Änderung. Hier ist mein letzter Code (Ich werde es aber für alle Fehler bearbeiten):

if let errCode = FIRAuthErrorCode(rawValue: error!._code) { 

    switch errCode { 
     case .errorCodeInvalidEmail: 
      print("invalid email") 
     case .errorCodeEmailAlreadyInUse: 
      print("in use") 
     default: 
      print("Create User Error: \(error)") 
    }  
} 
+1

Bevor Sie sogar die Antwort posten ! Ich habe meinen Code aktualisiert, als du ihn gepostet hast und es hat perfekt funktioniert! Trotzdem danke! – Mariah

+0

Super! Ich habe mir so viele Quellen angesehen, die nur erwähnen, dass du mit diesen Fehlern umgehen kannst, aber nicht erklärst, wie ich dachte, dass ich meinen Code poste, nachdem ich ihn endlich bekommen habe. –

+0

Hinweis in Swift 3 Ich muss eine Überbrückung von Error to NSError tun, so dass. Code ausgesetzt ist, dh. 'wenn lassen Fehler = Fehler als NSError? ... ' – xaphod

2

FIRAuthErrorCode ist eine int enum keine Zeichenfolge enum. Gehen Sie folgendermaßen vor:

if let error = error { 
     switch FIRAuthErrorCode(rawValue: error.code) !{ 
       case .ErrorCodeInvalidEmail: 

Weitere Informationen in diesem answer.

4

Auch wenn diese richtig beantwortet wurde, wollte dafür eine schöne Umsetzung teilt wir unser Projekt hinzugefügt.

Dies kann auch für andere Fehlertypen gemacht werden, aber wir haben es nur für die FIRAuthErrorCodes benötigt.

Wenn Sie FIRAuthErrorCode erweitern, um eine Variable errormessage vom Typ String haben, können Sie Ihre eigenen Fehlermeldungen für den Benutzer:

extension FIRAuthErrorCode { 
    var errorMessage: String { 
     switch self { 
     case .errorCodeEmailAlreadyInUse: 
      return "The email is already in use with another account" 
     case .errorCodeUserDisabled: 
      return "Your account has been disabled. Please contact support." 
     case .errorCodeInvalidEmail, .errorCodeInvalidSender, .errorCodeInvalidRecipientEmail: 
      return "Please enter a valid email" 
     case .errorCodeNetworkError: 
      return "Network error. Please try again." 
     case .errorCodeWeakPassword: 
      return "Your password is too weak" 
     default: 
      return "Unknown error occurred" 
     } 
    } 
} 

Sie passen konnten nur einige, wie wir oben und Gruppe unter den Rest haben " Unbekannter Fehler".

mit der die Erweiterung ein Fehler in Vladimir Romanov umgehen kann Antwort wie dargestellt ist:

func handleError(_ error: Error) { 
    if let errorCode = FIRAuthErrorCode(rawValue: error._code) { 
     // now you can use the .errorMessage var to get your custom error message 
     print(errorCode.errorMessage) 
    } 
} 
+0

' errorCode' hat kein Mitglied 'errorMessage' – Cesare

+0

@Cesare arbeitet auf meiner Seite. Möchten Sie mehr von Ihrem Code teilen? – Andreas

Verwandte Themen