问题描述
我试图查询Firebase,以检查是否有任何用户拥有
我试图查询Firebase,以检查是否有任何用户拥有
。如果你仔细想一想,这是有道理的:当一个孩子被添加到位置时,会引发 .ChildAdded 事件。如果没有添加子项,则不会引发该事件。
因此,如果要测试某个位置是否存在子项,则需要使用。价值。一旦你这样做,有各种方式来检测存在。这里有一个:
$ $ p $ $ $ $ $ $ ref.queryOrderedByChild(waiting)。queryEqualToValue(1)
.observeEventType(。值,withBlock {快照
print(snapshot.value)
if!snapshot.exists(){
print(test2)
}
}) ;
I am trying to query Firebase to check if any user that has waiting: "1" and then when the snapshot is returned I want to see whether it is equal to nil. I have attempted to do this but the method I have used does not work and I only have some sort of out put if the snapshot is not equal to nil. I have added the code I currently have and the JSON text from Firebase.
import UIKit import Firebase import Spring class GamesViewController: UIViewController { let ref = Firebase(url: "https://123test123.firebaseio.com") var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView() @IBAction func StartGamePressed(sender: AnyObject) { print("test1") var peopleWaiting: [String] = [] let userRef = Firebase(url:"https://123test123.firebaseio.com/users") userRef.queryOrderedByChild("waiting").queryEqualToValue("1") .observeEventType(.ChildAdded, withBlock: { snapshot in print(snapshot.key) if snapshot.key == nil { print("test2") let userData = ["waiting": "1"] let usersRef = self.ref.childByAppendingPath("users") let hopperRef = usersRef.childByAppendingPath("\(self.ref.authData.uid)") hopperRef.updateChildValues(userData, withCompletionBlock: { (error:NSError?, ref:Firebase!) in if (error != nil) { print("Data could not be saved.") self.displayAlert("Oops!", message: "We have been unable to get you into a game, check you have an internet conection. If this problem carries on contect support") } else { print("Data saved successfully!") let storyboard = UIStoryboard(name: "Main", bundle: nil) let Home : UIViewController = storyboard.instantiateViewControllerWithIdentifier("continueToGame") self.presentViewController(Home, animated: true, completion: nil) } }) } else { var randomUID: String peopleWaiting.append(snapshot.key) let randomIndex = Int(arc4random_uniform(UInt32(peopleWaiting.count))) randomUID = peopleWaiting[randomIndex] print(randomUID) let storyboard = UIStoryboard(name: "Main", bundle: nil) let Home : UIViewController = storyboard.instantiateViewControllerWithIdentifier("continueToGame") self.presentViewController(Home, animated: true, completion: nil) } }) } func displayAlert(title: String, message: String){ let formEmpty = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert) formEmpty.addAction((UIAlertAction(title: "Ok", style: .Default, handler: { (action) -> Void in }))) self.presentViewController(formEmpty, animated: true, completion: nil) } func activityIndicatorFunction(){ activityIndicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 100, 100)) activityIndicator.backgroundColor = UIColor(red:0.16, green:0.17, blue:0.21, alpha:1) activityIndicator.layer.cornerRadius = 6 activityIndicator.center = self.view.center activityIndicator.hidesWhenStopped = true activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.WhiteLarge view.addSubview(activityIndicator) activityIndicator.startAnimating() UIApplication.sharedApplication().beginIgnoringInteractionEvents() } }
JSON Data:
{ "68e42b7f-aea5-4c3f-b655-51a99cb05bb0" : { "email" : "[email protected]", "username" : "test1", "waiting" : "0" }, "8503d5a8-fc4a-492b-9883-ec3664898b4f" : { "email" : "[email protected]", "username" : "test2", "waiting" : "0" } }
There are a few things going on here, but the most important one is that you cannot test for the existence of children with .ChildAdded. That makes sense if you think about it: the .ChildAdded event is raised when a child is added to the location. If no child is added, the event won't be raised.
So if you want to test if a child exists at a location, you need to use .Value. Once you do that, there are various way to detect existence. Here's one:
ref.queryOrderedByChild("waiting").queryEqualToValue("1") .observeEventType(.Value, withBlock: { snapshot in print(snapshot.value) if !snapshot.exists() { print("test2") } });
这篇关于检查Swift中的Firebase快照是否等于零的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!