【问题标题】:FirebaseQuery Observer not RemovingFirebaseQuery 观察者未删除
【发布时间】:2020-07-29 00:54:55
【问题描述】:

我在 viewWillAppear 中添加一个观察者并在 viewWillDisappear 中删除它。我切换选项卡而不是手动向帖子引用添加一些内容,并且观察者仍在运行(我在块内有一个断点)。

移除观察者时我哪里出错了?

var postRefHandle: DatabaseHandle!
var query = DatabaseQuery()
var postsRefObserver = Database.database().reference().child("posts")

// called in viewWillAppear
func listen() {

    self.query = postsRefObserver
            .queryOrderedByKey()
            .queryLimited(toLast: 1)

    self.postRefHandle = self.query.observe(.childAdded) { (snapshot) in
        // do something
    }
}

// called in viewWillDisappear
func remove() {

    if let postRefHandle = postRefHandle {
        self.postsRefObserver.removeObserver(withHandle: postRefHandle)
    }

    self.postsRefObserver.removeAllObservers()
}

【问题讨论】:

    标签: ios swift firebase-realtime-database


    【解决方案1】:

    您需要在您注册它的确切查询对象上删除观察者。

    所以:

    self.query.removeObserver(withHandle: postRefHandle)
    

    self.query.removeAllObservers()
    

    【讨论】:

    • 我不是 100% 相信 self.postsRefObserver.removeAllObservers() 在给定 these docs 的情况下不应该起作用。但这种行为多年来一直如此,我怀疑在这一点上是否可以在没有意外中断的情况下对其进行更改。
    • 我使用了您提供的第一个示例来移除手柄,并且效果很好。这对我来说已经足够了?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多