2017-03-19 88 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通过多次旅行来获取节点下的所有内容。无论哪种情况,您都会得到相同的结果。这不是我的问题。当没有任何东西时,我的问题该怎么办。 –

相关问题