Документация говорит, что вам нужно позвонить observeEventType:withBlock
, чтобы удалить наблюдателя, если он вам больше не нужен.
Я видел образцы, где он вызывается внутри ViewDidDisAppear
. Я также нашел некоторый код Obj-C, называемый этим методом, в deinit
, который не является обязательным в Swift.
В моем простом приложении, однако, я хочу, чтобы данные синхронизировались до тех пор, пока я нахожусь в приложении. Если это так, нужно ли мне когда-либо звонить observeEventType:withBlock
?
Я проверил код примера Chat-Swift на сайте Firebase и не нашел observeEventType:withBlock
.
Означает ли это, что нормально не звонить observeEventType:withBlock
:. если я хочу, чтобы наблюдатель был включен, когда приложение используется?
Спасибо.
UPDATE
Спасибо Джей и Дэвиду. Я вижу, что имеет смысл наблюдать в ViewWillAppear и удалять его в ViewDidDisappear.
Тем не менее, я использую функцию observEventType для мониторинга любого изменения значения в node и будет обновлять интерфейс, если он есть. Если я поставлю его в 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
, однако он возвращает только последний node, а не путь из моего ref:
Например, если я добавлю значение ref/child1/child2/child3/значение, ChildAdded
вернет значение child3/value.
Итак, если мне нужно наблюдать Value, кажется, лучше положить его в ViewDidLoad
? Таким образом, он получает моментальный снимок один раз при загрузке представления и повторяется всякий раз, когда есть изменение, но не получает моментальный снимок только потому, что отображается представление.