2016-03-04 13 views
2

Я пытаюсь получить имя пользователя от пользователя через @IBAction из пользовательского интерфейса.Проверка наличия имени пользователя в базе данных firebase.

Моя цель - проверить, существует ли имя пользователя в Firebase. Если он не существует, зарегистрируйте его. Если он существует, я хотел бы сделать некоторые другие вещи.

Вот мой код.

@IBAction func enterUsername(){ 

    let enteredUsername = usernameText!.text! 
    let namesRef = ref.childByAppendingPath("/usernames/\(enteredUsername)") 

    namesRef.observeEventType(.Value, withBlock: { 
     snap in 

     if (snap.value is NSNull){ 
      let userNameAndUUID = ["Username" : enteredUsername, "UUID" : self.appDelegate.UUID] 
      namesRef.setValue(userNameAndUUID) 
      print("first block") 
     }else { 
      print("second block") 
      //do some other stuff 
     } 
    }) 
} 

Проблема, которую я имею, что если имя пользователя является уникальным (не существует), то оба утверждения оттиском, если/еще работают. Выход: первый блок второй блок

Если имя не является уникальным, он правильно пропускается, если часть, если/иначе.

Почему обе секции инструкции if/else работают?

Спасибо за любую помощь.

ответ

2

Поведение, которое вы видите, действительно предназначено. Поскольку вы прикрепляете наблюдателя, выполняется первый, если блок выполняется для уникального имени, но внутри этого блока вы устанавливаете значение.

Это снова вызывает обратный вызов, который на этот раз будет проходить через блок else.

Правильный способ изменить этот код - использовать observeSingleEventOfType, чтобы вы только читали значение один раз и не наблюдали его непрерывно.

+0

Конечно, это имеет смысл. Благодарю. – jakhamma

Смежные вопросы