繁体   English   中英

迅速的Firebase移除观察者

[英]swift Firebase remove observer

我注意到在打开视图控制器时,已触发多次喜欢或不喜欢的打印,因此我在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)
}

请参考此链接:

https://firebase.google.com/docs/database/ios/read-and-write#detach_listeners

同样,在通过处理程序删除所有引用之后,只需删除该引用的removeAllObservers即可,以防万一任何观察者离开了,它可能会继续同步,并且应该在从firebase收到快照后将其删除,因为我也面临着解决该问题的相同问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM