Firebase InvalidPathValidation hasChild in Swift

时间:2018-01-16 15:00:19

标签: ios swift firebase swift3

我目前正在尝试编写一个函数,该函数允许知道用户名是否已被占用。

我使用Firebase来做到这一点。

这是我的代码:

// Var REF_USERNAME_LIST within Api.User
var REF_USERNAME_LIST = Database.database().reference().child("username-list")

let username = "username.test"

      let ref = Api.User.REF_USERNAME_LIST
      ref.observeSingleEvent(of: .value, with: { (snapshot) in
         if snapshot.hasChild(username){
            print("taken")
            return
         } else {

            print("good")
         }
      }) { (error) in
         print(error.localizedDescription)
}

如果我使用函数hasChild,我可以解决这个问题:

  

由于未捕获的异常'InvalidPathValidation'而终止应用,原因:'(hasChild :)必须是非空字符串且不包含'。' '#''$''['或']''

我希望有可能在用户名中使用一个点。

您是否知道如何让这种可能性以及允许知道用户名是否已被使用的功能?

编辑:

这是数据库的一部分:

enter image description here

新架构:

enter image description here

2 个答案:

答案 0 :(得分:0)

let ref = Api.User.REF_USERNAME_LIST
      ref.observeSingleEvent(of: .value, with: { (snapshot) in
         if snapshot.value is NSNull{
             //handle null error
         }
         else{
             if let usernameList = snapshot.value as? NSDictionary{
                                             //or [String: String]
                  for keys in usernameList.allKeys{
                      if (usernameList.getObject(for: keys) as! String == testUsername){
                           //username exists
                      }
                  }
             }
         }
      }) { (error) in
         print(error.localizedDescription)
}

答案 1 :(得分:0)

在我的情况下,我在空子上调用removeAllObservers()方法