Firebase: quando chamar removeObserverWithHandle rapidamente
A documentação diz que você precisa ligarobserveEventType:withBlock
para remover um observador se você não precisar mais dele.
Eu vi amostras onde é chamado dentroViewDidDisAppear
. Também encontro algum código Obj-C chamado esse método emdeinit
, o que não é necessário no Swift.
No meu aplicativo simples, no entanto, quero que os dados sejam sincronizados enquanto estiverem no aplicativo. Se for esse o caso, eu tenho que ligarobserveEventType:withBlock
sempre?
Verifiquei o código de exemplo do Chat-Swift no site do Firebase e não encontreiobserveEventType:withBlock
.
Isso significa que está tudo bem em não ligarobserveEventType:withBlock
:. se eu quiser que o observador esteja ligado quando o aplicativo estiver em uso?
Obrigado.
ATUALIZAR
Graças a Jay e David. Vejo que faz sentido observar no ViewWillAppear e removê-lo no ViewDidDisappear.
No entanto, estou usando observeEventType para monitorar qualquer alteração de valor no nó e atualizaria a interface do usuário, se houver alguma. Se eu colocá-lo no ViewWillAppear:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
ref.observeEventType(.Value, withBlock: { snap in {
// **update UI if there is any Value change**
})
}
O problema de colocá-lo emviewWillAppear
é isso, é chamado toda vez que a exibição é exibida, independentemente da alteração do valor ou não. Por esse motivo, o instantâneo é baixado e minha interface do usuário é atualizada toda vez que eu volto à exibição. Isso se torna contraproducente.
Eu também tenteiChildAdded
/ChildRemoved
, no entanto, ele retorna apenas o último nó, não o caminho da minha ref:
Por exemplo, se eu adicionar a ref / child1 / child2 / child3 / value,ChildAdded
retornaria apenas child3 / value.
Então, se eu tiver que observar Valor, parece que colocá-lo emViewDidLoad
é melhor? Dessa maneira, ele obtém o instantâneo uma vez quando a visualização é carregada e é repetido sempre que houver uma alteração, mas não o obtém apenas porque a visualização é exibida.