2016-03-04 97 views
2

我想从用户通过@IBAction从用户名获得用户名。检查用户名是否存在于Firebase DB中。

我的目标是检查用户名是否已存在于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的BOTH打印语句。 输出: 第一块 第二块

如果名称不是唯一的,它被适当地跳过的如果/否则如果部分。

为什么if/else语句的两个部分都在运行?

感谢您的任何帮助。

回答

2

你看到的行为的确是有意的。由于您正在附加一个观察者,因此第一个if块正在运行一个唯一的名称,但在该块内,您正在设置一个值。

这将再次触发回调,这次将通过else块运行。

更改此代码的正确方法是使用observeSingleEventOfType,以便您只读取一次值并且不要连续观察它。

+0

当然,这是有道理的。谢谢。 – jakhamma

相关问题