当我在Firebase数据库节点上启动observer
时,我注意到即使没有数据更改,Firebase也会继续调用方法observer
。
这是我的设置:
FIRDatabase
.database()
.reference(withPath: "test")
.observe(FIRDataEventType.value, with: { (snapshot) in
print("Firebase Data Updated");
}
);
当我对Firebase数据库进行一次更改时,observer
会多次调用其关闭函数。
Firebase数据已更新
Firebase数据已更新
Firebase数据已更新
Firebase数据已更新
Firebase数据已更新
Firebase数据已更新
Firebase数据已更新
...
为什么会这样?
如何阻止这种情况发生,并在更新后只能拨打observer
一次?
答案 0 :(得分:4)
这个观察者很可能多次注册。当用户注销时,您注册的侦听器块保持注册状态,这样当用户再次登录时,您正在注册第二个侦听器。
捕获ref
和handle
观察者通常是一种好习惯,并在完成操作后删除句柄(即用户注销时)。你可以这样做:
ref, handle = FIRDatabase
.database()
.reference(withPath: "test")
.observe(FIRDataEventType.value, with: { (snapshot) in
print("Firebase Data Updated");
}
);
退出时:
ref.removeObserverWithHandle(handle)
另一种可能的解决方案是确保只调用一次是使用.observeSingleEvent()
代替.observe()
。
答案 1 :(得分:0)
{{1}}