【发布时间】:2017-09-07 18:58:24
【问题描述】:
我注意到喜欢或不喜欢的打印在我打开视图控制器时被触发多次,所以我在 viewDidDisappear 中添加了一个删除观察者(我尝试了所有列出的),但它继续触发多次,有人可以帮助我吗?
这是我的代码:
private var databaseHandle: FIRDatabaseHandle!
var ref = FIRDatabase.database().reference()
var isLiked: Bool = false
override func viewDidLoad() {
super.viewDidLoad()
isLiked = false
databaseHandle = ref.child("favperuser").child(FIRAuth.auth()!.currentUser!.uid).observe( .value, with:{(snap) in
if snap.hasChild(self.detailId){
print("is liked")
self.isLiked = true
self.likeButton.setTitle("Unlike", for: .normal)
self.likeButton.setImage(UIImage(named: "star-")?.withRenderingMode(.alwaysOriginal), for: .normal)
self.likeButton.setImage(UIImage(named: "star-")?.withRenderingMode(.alwaysOriginal), for: .highlighted)
}else{
print("not liked")
self.isLiked = false
self.likeButton.setTitle("Like!", for: .normal)
self.likeButton.setImage(UIImage(named: "star+")?.withRenderingMode(.alwaysOriginal), for: .normal)
self.likeButton.setImage(UIImage(named: "star+")?.withRenderingMode(.alwaysOriginal), for: .highlighted)
}
})
self.isLiked = false
}
@IBAction func likePressed(_ sender: UIButton) {
if self.isLiked == false {
ref.child("favperuser").child( FIRAuth.auth()!.currentUser!.uid).updateChildValues([detailId: true])
} else {
ref.child("favperuser").child( FIRAuth.auth()!.currentUser!.uid).child(detailShellId).removeValue { (error, ref) in
if error != nil {
print("error \(error)")
}
}
}
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
ref.removeObserver(withHandle: databaseHandle)
ref.child("favperuser").removeObserver(withHandle: databaseHandle)
ref.child("favperuser").child(FIRAuth.auth()!.currentUser!.uid).removeObserver(withHandle: databaseHandle)
}
【问题讨论】:
-
viewDidDisappear实际调用了吗? -
是的,有一个关闭功能,反正我也把卸妆器放在了关闭功能里面,没有任何改变
-
你确定你没有在每次 VC 演示中多次调用
observe吗?这可以解释为什么您似乎无法删除 all 观察者(实际上只是删除了最后一个注册的观察者)。 -
我试图在 wiewDisapper 函数中只留下 ref.child("favperuser").child(FIRAuth.auth()!.currentUser!.uid).removeObserver(withHandle: databaseHandle)作品