2017-03-19 138 views
2

我有一個存在的ref,我使用observeEventType來查詢數據。但是由於用戶刪除它,ref可能沒有數據。我使用snapshot.exists()進行測試。在snapshot.exists()以下的情況下將返回false/no。由於它是假的,我想做別的事情,但代碼永遠不會運行當snapshot.exists()返回false時該怎麼辦?

當snapshot.exists()返回false/no時,我該怎麼做點別的?

 //there is no data at levelTwo so there's nothing to observe 
let levelTwoRef = dbRef.child("players").child("uid").child("levelTwo") 

levelTwoRef.observeEventType(.ChildAdded, withBlock: { 
     (snapshot) in 
     if snapshot.exists(){ 
      if let dict = snapshot.value as? [String:AnyObject]{ 
       let power = dict["power"] as? String 
       let score = dict["score"] as? String 
      } 
     //this will never run because the data has been deleted 
     } else{ 
      do something else as an alternative //why isn't this running?? 
     } 
    }) 

enter image description here

+0

用您的數據庫JSON結構更新您的問題(實際上,因爲文本不是圖像!)。 – Dravidian

+0

這不是您的JSON結構,您可以通過點擊Firebase數據庫控制檯中的EXPORT JSON獲取JSON結構,將其最小化爲最相關的部分,然後發佈。 – Dravidian

+0

@Dravidian你教會了我一些新的東西。我從來不知道這一點。我會做幾個。謝謝! –

回答

0

火力地堡有.hasChild功能,你可以在child運行,看它是否存在:

func hasChild(_ childPathString: String) -> Bool 

它需要一個childString參數,並根據閹存不存在返回TrueFalse

檢查孩子是否存在的方法是先在孩子找到孩子之前設置一條路徑。從這個孩子尋找形勢"levelTwo"之前,孩子是uid

//there is no data at levelTwo so there's nothing to observe 
let levelTwoRef = dbRef.child("players").child("uid").child("levelTwo") 

假設你知道UID裁判肯定存在設置了UID裁判,而不是levelTwo恆定裁判

// uid path definitely exists 
let uidRef = dbRef.child("players").child("uid") 

運行.valueUID裁判和回調裏面檢查,看是否levelTwo [R ef存在:

uidRef?.observeSingleEvent(of: .value, with: { 
       (snapshot) in 

       if snapshot.hasChild("levelTwo"){ 
        // true -levelTwo ref Does exist so do something 
       }else{ 
        // false -levelTwo ref DOESN'T exist so do something else 
       } 
} 
0

您正在運行的內部與該類型.ChildAdded,這將返回創建的每個新路徑的快照observeEventType。如果只需要使用observeSingleEventOfTypelink)和.Value作爲事件類型,則只需檢索該值。

+0

謝謝。 2件事。 1-我嘗試observeSingleEventOfType,因爲沒有什麼我的else語句沒有運行。 2-節點下會有多條路徑。 .Value從節點中立即獲取所有內容的快照。 .ChildAdded通過多次旅行來獲取節點下的所有內容。無論哪種情況,您都會得到相同的結果。這不是我的問題。當沒有任何東西時,我的問題該怎麼辦。 –

相關問題