removeObserverWithHandle, похоже, не работает в FireBase iOS - PullRequest
0 голосов
/ 28 июня 2018

Я получаю данные из базы данных и после этого удаляю наблюдателя. Но если данные получат изменения в этом месте, блок все равно будет вызван.

Код для извлечения данных:

  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 голосов
/ 28 июня 2018

Вы поместили .removeObserver в viewWillDisappear, что означает, что он будет удален непосредственно перед исчезновением вида. Поэтому, если вы останетесь в этом представлении в течение 10 минут, и в этом пути Firebase произойдет 100 изменений, он отобразит все 100 из них.

То, что вы ищете, это .observeSingleEvent, который считывает данные один раз, а затем удаляет наблюдателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...