我正在从Firebase中获取数据,然后删除观察者。但是,如果数据在该位置发生更改,则仍会调用该块。
获取数据的代码:
if messageCountDBReference == nil {
messageCountDBReference = FireBaseReferenceFactory.messageListReference(forSericeId: serviceId)
}
messageCountDBHandle = messageCountDBReference!.observe(.value, with: { (dataSnapShot) in
/// data processing
})
在ViewWillDisappear
中删除观察者。
if messageCountDBHandle != nil {
messageCountDBReference?.removeObserver(withHandle: messageCountDBHandle!)
}
messageCountDBReference = nil
messageCountDBHandle = nil
答案 0 :(得分:1)
您已将.removeObserver
放在viewWillDisappear
中,这意味着将在视图消失之前将其删除。因此,如果您在该视图中停留10分钟,并且该Firebase路径中发生了100项更改,它将显示所有100项更改。
您要寻找的是.observeSingleEvent
,它先读取一次数据,然后删除观察者。