2016-01-31 59 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 
    } 
}) 

希望這有助於!