【问题标题】:How do i check if snapshot contains a specific value in Firebase?如何检查快照是否包含 Firebase 中的特定值?
【发布时间】:2017-08-02 14:15:47
【问题描述】:

当我运行此代码时,我收到一条错误消息:

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

我的问题是如何检查我的快照是否包含 user.email?

self.databaseRef.child("Test").child("xxx").observeSingleEvent(of: .value, with: { (snapshot) in

                    if snapshot.hasChild((user!.email)!){
                        print("yess")
                    }else{
                        print("Not in db")
                    }


                })

【问题讨论】:

    标签: ios swift firebase


    【解决方案1】:

    您在文本中指定了您的问题。一封电子邮件总是包含一个点“.”。 中不允许这样做。您检查密钥是否包含电子邮件,但这是不允许的。像这样构建您的数据库:

    "email": theemail
    

    这样,您的 key"email",而您的 valuetheemail。在 value 中,每个字符串都是允许的。

    self.databaseRef.child("Test").child("xxx").observeSingleEvent(of: .value, with: { (snapshot) in
        let values = snapshot.value as? NSDictionary
        let email = values?["email"] as? String ?? "No email found"
        // OR
        if let email = values?["email"] as? String{
        //email (above declared variable) holds the value (the real email)
        }else{
        //no email
        }
        if email == (user!.email)!{
    
        }else{
        }
    })
    

    【讨论】:

    • 是的,但是我的键是 0,值是“test@test.com”
    • @EliasKnudsen 是的,但是在您的方法中,您搜索包含点的键,因为您查找与用户电子邮件相同的键。这是不允许的。
    • @EliasKnudsen 查看我的编辑,只需比较 2 个变量。
    【解决方案2】:

    让我知道这是否有效。它检查电子邮件字段是否确实存在。我认为您收到错误是因为您检查实际用户电子邮件的方式。

    self.databaseRef.child("Test").child("xxx").observeSingleEvent(of: .value, with: { (snapshot) in
    
        if snapshot.hasChild("email"){
    
            print("yess")
    
        }else{
    
            print("Not in db")
        }
    })
    

    hasChild 如果指定的子路径有(非空)数据,则返回 true。

    【讨论】:

    • 抱歉没用,我会详细说明我的问题
    • self.databaseRef.child("Test").child("xxx").observeSingleEvent(of: .value, with: { (snapshot) in if snapshot.hasChild("email"){ print("yess") }else{ print("Not in db") } }) 这只会检查“email”是否在快照中。我想检查我的快照是否包含 user.email 作为值
    猜你喜欢
    • 2020-05-24
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多