Firebase'观察'在iOS上使用Swift多次调用

时间:2017-04-27 22:47:57

标签: ios swift firebase firebase-realtime-database

当我在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一次?

2 个答案:

答案 0 :(得分:4)

这个观察者很可能多次注册。当用户注销时,您注册的侦听器块保持注册状态,这样当用户再次登录时,您正在注册第二个侦听器。

捕获refhandle观察者通常是一种好习惯,并在完成操作后删除句柄(即用户注销时)。你可以这样做:

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}}