【问题标题】:Checking to see if username exists in firebase DB.检查用户名是否存在于 firebase 数据库中。
【发布时间】:2016-03-04 17:30:15
【问题描述】:

我正在尝试通过 UI 中的 @IBAction 从用户那里获取用户名。

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

如果名称不是唯一的,则它正确地跳过了 if/else 的 if 部分。

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

感谢您的帮助。

【问题讨论】:

    标签: ios swift firebase


    【解决方案1】:

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

    这会再次触发回调,这一次将通过 else 块。

    更改这段代码的正确方法是使用observeSingleEventOfType,这样你就只读取一次值,不要连续观察。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 2019-01-17
      • 2021-12-28
      • 2020-06-24
      • 2013-08-31
      相关资源
      最近更新 更多