2016-07-14 4 views
0

Ich arbeite an einer Funktion, die Benutzerregistrierung bearbeitet und dabei prüft, ob der vom Benutzer eingegebene Benutzername eingegeben wurde oder nicht, um den Benutzer zu informieren, einen anderen zu wählen. Ich habe den folgenden Code, um dieses Szenario zu erreichen:Firebase - Aufruf an Backend nicht möglich

@IBAction func proceedPressed(sender: AnyObject) { 

     /**********************Perform Validation************************/ 
     if(self.emailTxtField.text != "" && self.passwordTxtField.text != "") 
     { 
      print("Email and Password not empty") 
      self.usernameValidation({(result) -> Void in 
       if(result == false) 
       { 
        print("Result False") 
        self.usernameErrorLabel.text = "Username Taken" 
       }else{ 
        print("Result True") 
        //Username is available...Proceed 
        self.usernameErrorLabel.text = "" 

        FIRAuth.auth()?.createUserWithEmail(self.emailTxtField.text!, password: self.passwordTxtField.text!) { (user, error) in 
         if(error == nil) 
         { 
          print("Creating User with Email") 
          /*Create the user object as submitted*/ 
          self.dbReference.child("users").child(user!.uid).setValue(["username": self.emailTxtField.text!,"name":self.nameTxtField.text!, "email":self.emailTxtField.text!, "mobile":self.mobileTxtField.text!, "homeAddress":"N", "workAddress":"N", "otherAddress":"N", "profilePictureRef":"N","telephone":"0","friendsCount":0, "retailersCount":0]) 


         }else{ 
          print("Error occured: \(error?.description)") 
         } 
        }//end of createUserWithEmail 
       } 
      }) 

     }else{ 
      print("Error: Email or Password field is empty") 
     } 

    } 

und die Benutzername zu überprüfen:

func usernameValidation(completion: (result: Bool) -> Void) 
    { 
     print("Username is: \(self.usernameTxtField.text!)") 

     dbReference.child("usernamesTaken").queryOrderedByValue().queryEqualToValue(self.usernameTxtField.text!).observeEventType(.Value, withBlock: { (snapshot: FIRDataSnapshot!) -> Void in 
      print(snapshot.childrenCount) 
      if(snapshot.childrenCount == 0) 
      { 
       print("result is true in username validation") 
       //Username Available 
       completion(result:true) 
      }else{ 
       print("result is false in username validation") 
       //Username Taken 
       completion(result:false) 
      } 
     }) 
    } 

Das Problem mit der oben ist, dass der vollständige Code nicht ausgeführt werden scheint. Wenn die Taste gedrückt wird, bekomme ich folgende Meldungen in der Konsole: - Email und Passwort nicht leer - Benutzername ist: [Wert eingegeben in BenutzernameTxtField.text und dann nichts mehr. Obwohl ich viele print-Anweisungen geschrieben habe, um zu versuchen, zu sehen, wo das aufhört, ist dies jedoch der weiteste Weg, den der Code in Bezug auf das Drucken der Anweisungen ging.

Gibt es etwas falsch hier, dass ich verpasse?

Vielen Dank im Voraus.

+0

Da das 'completion:' das einzige Argument in Ihrer Funktion 'usernameValidation()' ist, können Sie 'self.usernameValidation {result in ..} 'anstelle von' self.usernameValidation ({(result) -> Void in. – Dershowitz123

+0

@ Dershowitz123 Danke für den alternativen Stil.Dieser adressiert leider nicht das Hauptproblem –

+0

Ich denke, der Code ist in Ordnung, überprüfen, ob usernameValidation immer wahr zurückgibt oder immer falsch zurückgibt und Sie diesen Code nicht erreichen. –

Antwort

1

Ich habe noch ein paar Tests durchgeführt und dann das Problem über die xcode-Konsole entdeckt. Ich kopierte die folgenden von der Feuerbasis Website, um die Daten zu testen, holen:

ref.child("users").child(userID!).observeSingleEventOfType(.Value, withBlock: { (snapshot) in 
    // Get user value 
    let username = snapshot.value!["username"] as! String 
    let user = User.init(username: username) 

    // ... 
    }) { (error) in 
    print(error.localizedDescription) 
} 

Die oben einen Fehler zeigte, dass „Zugriff verweigert“ ist. Danach habe ich die Regeln im Datenbankbereich in der Konsole bearbeitet und .read und .write erlaubt und das tat es. Ich dachte, ich würde die Details posten, nur für den Fall, dass jemand anderes steckenbleibt.

+0

Die erste blaue Notiz auf unserer [Dokumentationsseite zum Lesen von Daten] (https://firebase.google .com/docs/database/ios/retrieve-data) versucht, das herauszurufen, aber es ist in der Tat leicht zu übersehen. Gut zu hören, dass Sie das Problem gefunden haben. –

Verwandte Themen