如何通过单次观察访问Firebase数据库中的最新数据?

时间:2017-06-30 15:07:48

标签: ios swift firebase firebase-realtime-database

似乎是一个简单的问题,但如果我打电话:

query.observeSingleEvent(of: .value ...

然后我总是得到本地持久化的数据。绕过这个(我已经发现)的唯一方法是建立一个继续无限观察的观察者。

例如,假设我有一个应用,我正在查看用户的个人资料。该用户的数据在本地持久存在。十天后我回到同一个档案。该用户已更改其名称(或其他内容)。我只需要观察一个事件,但是这个事件会给我缓存的数据(现在已经过时了)。我不想为我访问的每个用户个人资料设置一个连续的观察者,因为这会导致不必要的更新(假设我再也没有回到此个人资料中)。

无论如何,我希望这个问题很明确。非常感谢任何见解。

编辑:

我最终做的解决方法是简单地调用observe(.value)并让它响应两次。第一个响应来自缓存;第二个来自服务器。这有助于在您提出请求后无法保证建立连接的情况。

2 个答案:

答案 0 :(得分:1)

据我了解,您希望使用observeSingleEvent检索新数据。您可以附加keepSynced来执行此操作:

    let query = FIRDatabase.database().reference().child("item")

    query.keepSynced(true)

    query.observeSingleEvent(of: .value ... 

修改

如果无法按时建立Firebase连接,则带有keepSycned的

ObserveSingleEventType将无效。在appLaunch期间或appDelegate中尤其如此,其中Firebase连接存在延迟,而是提供缓存结果。如果启用持久性并且observeSingleEvent可能首先提供缓存数据,它也有时不起作用。在这种情况下,首选ObserveEventType是首选,如果您绝对需要新数据,则应该使用。{/ p>

答案 1 :(得分:0)

就我而言,将Firebase iOS SDK从v4.11.0更新到v5.4.0解决了问题。