Reputation: 75
I have written a firebase query that searches for the level of a user and then changes the level-label on the view controller. However, this query is giving me level for the first user in my Firebase db instead of the level for the current user. How can I resolve this issue?
@IBOutlet weak var levelLabel: UILabel!
var refUser:DatabaseReference?
override func viewDidLoad() {
super.viewDidLoad()
refUser = Database.database().reference().child("userInfo");
let userID = Auth.auth().currentUser!.uid
let query = refUser?.queryOrdered(byChild: "userId").queryEqual(toValue: "\(userID)")
query?.observeSingleEvent(of: .value, with: { snapshot in
for child in snapshot.children {
let childSnap = child as! DataSnapshot
var dict = childSnap.value as! [String: Any]
let level=dict["level"] as! String
self.levelLabel.text=level
}
})
}
Photo of Firebase DB
Upvotes: 1
Views: 51
Reputation: 1241
try in such way:
query?.observeSingleEvent(of: .value, with: { snapshot in
guard let values = snapshot.value as? [String: Any],
let level = values["level"] as? String else {
return
}
DispatchQueue.main.async {
self.levelLabel.text = level
}
})
Upvotes: 1