Firebase: когда вызывать removeObserverWithHandle в swift
Документация говорит, что вам нужно позвонитьobserveEventType:withBlock
удалить наблюдателя, если он вам больше не нужен.
Я видел образцы, где это называется вViewDidDisAppear
, Я также нахожу некоторый код Obj-C под названием этот метод вdeinit
, что не является необходимым в Swift.
Однако в моем простом приложении я хочу, чтобы данные синхронизировались, пока я в приложении. Если это так, я должен позвонитьobserveEventType:withBlock
Когда-либо?
Я проверил пример кода Chat-Swift на сайте Firebase и не нашелobserveEventType:withBlock
.
Значит, нормально не звонитьobserveEventType:withBlock
:. если я хочу, чтобы наблюдатель был включен, когда приложение используется?
Спасибо.
ОБНОВИТЬ
Спасибо Джею и Дэвиду. Я вижу, что имеет смысл наблюдать в ViewWillAppear и удалять его в ViewDidDisappear.
Тем не менее, я использую Наблюдение за событием для отслеживания любых изменений значения для узла и будет обновлять пользовательский интерфейс, если таковые имеются. Если я положу его в ViewWillAppear:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
ref.observeEventType(.Value, withBlock: { snap in {
// **update UI if there is any Value change**
})
}
Проблема с этимviewWillAppear
в том, что он вызывается каждый раз, когда появляется представление, независимо от того, изменяется значение или нет. Из-за этого снимок загружается, и мой пользовательский интерфейс обновляется каждый раз, когда я возвращаюсь к представлению. Это становится контрпродуктивным.
Я также пыталсяChildAdded
/ChildRemoved
однако он возвращает только последний узел, а не путь из моей ссылки:
Например, если я добавлю к ref / child1 / child2 / child3 / value,ChildAdded
вернул бы только child3 / value.
Так что, если мне нужно соблюдать ценность, кажется, чтоViewDidLoad
лучше? Таким образом, он получает снимок один раз при загрузке представления и будет повторяться всякий раз, когда есть изменение, но не получит снимок только потому, что представление появляется.