2017-08-02 147 views
0

當我運行這段代碼,我得到的是說這樣的錯誤:如何檢查快照是否包含Firebase中的特定值?

終止應用程序由於未捕獲的異常「InvalidPathValidation」,原因是:'(hasChild :)必須是一個非空字符串,不能包含「。 '#'''''['or']''

我的問題是如何檢查我的快照是否包含的值 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") 
        } 


       }) 

回答

0

讓我知道這是否工作。它檢查電子郵件字段是否確實存在。我想你會因爲檢查實際用戶的電子郵件而收到錯誤。

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。

+0

對不起,它沒有工作,我會指定我的問題更多 –

+0

好吧,一秒鐘。我將編輯帖子 – Grady

+0

你能告訴我什麼對它不起作用嗎? (「電子郵件」){ – Grady

1

您可以在文本中指定您的問題。一封電子郵件總是包含一個點'。'。這在密鑰中是不允許的。您檢查密鑰是否包含電子郵件,但這是不允許的。構建數據庫,以這樣的:

"email": theemail 

這樣你關鍵「電子郵件」和你theemail。在的值中,每個字符串都是允許的。

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

是的,但是我的密鑰是0並且值是「[email protected]」 –

+1

@EliasKnudsen是的,但是在您的方法中,您搜索包含點,因爲你要查找與用戶電子郵件相同的密鑰。這是不允許的。 –

+0

@EliasKnudsen看到我的編輯,只是比較2個變量。 –

相關問題