似乎是一个简单的问题,但如果我打电话:
query.observeSingleEvent(of: .value ...
然后我总是得到本地持久化的数据。绕过这个(我已经发现)的唯一方法是建立一个继续无限观察的观察者。
例如,假设我有一个应用,我正在查看用户的个人资料。该用户的数据在本地持久存在。十天后我回到同一个档案。该用户已更改其名称(或其他内容)。我只需要观察一个事件,但是这个事件会给我缓存的数据(现在已经过时了)。我不想为我访问的每个用户个人资料设置一个连续的观察者,因为这会导致不必要的更新(假设我再也没有回到此个人资料中)。
无论如何,我希望这个问题很明确。非常感谢任何见解。
编辑:
我最终做的解决方法是简单地调用observe(.value)并让它响应两次。第一个响应来自缓存;第二个来自服务器。这有助于在您提出请求后无法保证建立连接的情况。
答案 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解决了问题。