2016-01-31 63 views
0

我使用firebase执行查询以检查是否有任何具有特定值的子对象的对象。问题是如果没有这样的对象代码不运行。因此,在下面的代码中,如果没有包含facebookID的子项的对象是17,则其余代码将永远不会运行。有没有办法确定查询何时发现0结果?查询为空时的Firebase

func previousUser(completion:(result:Bool)->Void){ 

    var queryFound = false 
    print("check if user is previous") 
    print(UserData.globalfacebookID) 
    let ref = Firebase(url:"https://amber-torch-556.firebaseio.com/Users") 
    ref.queryOrderedByChild("facebookID").queryEqualToValue(17).observeSingleEventOfType(.ChildAdded, withBlock: { snapshot in 

    print(snapshot.childrenCount) 
    print("query has ran") 
    UserData.globalparseID = snapshot.key 

    queryFound = true 
    completion(result:queryFound) 

}) 

回答

1

检查你的ref以确认它是有效的。

,并尝试这个

 ref.queryOrderedByChild("facebookID").queryEqualToValue(17) 
      .observeEventType(.Value, withBlock: { snapshot in 

       if snapshot.value is NSNull { 
       print("dude, snapshot was null") 
       } else { 
       print(snapshot.key) 
       } 

     }) 

变化.ChildAdded到.value的,然后再检查NSNull

0

要检查查询是否返回0的结果,你可以检查快照如下:

if snapshot.exists() { 
    // write relevant logic here 
} 
else { 
    // handle the case when a query finds 0 results 
} 

在你的情况,

func previousUser(completion:(result:Bool)->Void){ 
var queryFound = false 
print("check if user is previous") 
print(UserData.globalfacebookID) 
let ref = Firebase(url:"https://amber-torch-556.firebaseio.com/Users") 
ref.queryOrderedByChild("facebookID").queryEqualToValue(17).observeSingleEventOfType(.ChildAdded, withBlock: { snapshot in 
    if snapshot.exists() { 
     print(snapshot.childrenCount) 
     print("query has ran") 
     UserData.globalparseID = snapshot.key 
     queryFound = true 
     completion(result:queryFound) 
    } 
    else { 

     // handle the case where query finds zero(0) results 
    } 
}) 

希望这有助于!