我在我的应用中使用了Firebase's Realtime database.我正在从数据库中获取数据,并进行了一些更改,之后我就是removing the observer岁,这不是很好.
我在Realtime Database中有一些数据是这样的:
我使用了Firebase的Obview(.value)函数来获取这个值,然后我更新了一个条目,然后删除了观察者.这是我的代码:
func updatePoints() {
let firebaseId = UserDefaults.standard.value(forKey: "firebaseId") as? String ?? ""
let reference = self.database.child("Points").child(firebaseId)
var handler : UInt = 0
handler = reference.observe(.value, with: { snapshot in
guard let userPoints = snapshot.value as? [String : Any] else {
print("no points data found")
return
}
let pointsLeft = userPoints["points_left"] as? Int ?? 0
reference.child("points_left").setValue(pointsLeft - 1)
reference.removeObserver(withHandle: handler)
})
}
现在的问题是,这个观察者跑了两次.例如,如果为"points_left" : 10,则在此函数之后,剩余的点数将具有8个值,但它应该为9.它运行了两次,我不明白为什么它会在我使用removeObserver的时候这样做.有没有人能帮我一下?