在FireBase iOS中,removeObserverWithHandle似乎不起作用

时间:2018-06-28 09:58:33

标签: ios swift firebase firebase-realtime-database

我正在从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

1 个答案:

答案 0 :(得分:1)

您已将.removeObserver放在viewWillDisappear中,这意味着将在视图消失之前将其删除。因此,如果您在该视图中停留10分钟,并且该Firebase路径中发生了100项更改,它将显示所有100项更改。

您要寻找的是.observeSingleEvent,它先读取一次数据,然后删除观察者。