【问题标题】:Firebase .value observer not listening if ref does not exist, but later exists如果 ref 不存在,Firebase .value 观察者不听,但后来存在
【发布时间】:2017-05-15 09:25:18
【问题描述】:

假设用户有一个节点,其中存储了他们所有收藏帖子的 ID (/users/$uid/favourites/$postid)。因此,在我的 ViewController 中,我观察 /users/$uid/favourites/ 节点,这样我就可以获得所有最喜欢的 postid,然后迭代地获取 post 对象。

如果用户没有收藏夹,则“收藏夹”节点尚不存在。我发现如果我在这种状态下附加一个 .value 事件观察者,它永远不会在用户稍后收藏帖子时触发(即,当“收藏夹”参考变得存在时。如果我使用 .childAdded 观察者,则不会发生此问题.

这是一个错误还是特定的设计功能?另外,是否有解决方法...当然,不需要我使用 .childAdded 观察者。谢谢。

【问题讨论】:

  • Firebase 值观察器立即使用该位置的当前值触发。如果没有值,它们会立即以空快照触发。如果您不是这种情况,请分享minimal code that reproduces the behavior
  • @Frank,我解决了这个问题,这是一些奇怪的安全规则的副作用,它阻止了对节点的观察。我花了很多时间在客户端解决这个问题,甚至没有考虑到这一点。为了显示“重现行为的最小代码”,我用最小的节点结构分离了一个干净的 firebase 项目,并且没有出现问题。然后“区分”这两个项目,发现唯一的区别是安全规则。我更改了当前项目的规则,现在 .value 事件监听现在可以按预期工作了。
  • 查看.... 创建 MCVE 通常可以帮助您找到自己的问题。干得好!

标签: swift firebase firebase-realtime-database


【解决方案1】:

它应该像你描述的那样工作。确保当您添加 .value 事件侦听器时,您是在 .observe() 侦听器而不是 observeSingleEvent() 侦听器中执行此操作。

【讨论】:

  • 感谢您的意见,但我已经在使用 .observe,而不是 .observerSingleEvent
  • 在这种情况下,请确保代码中没有任何拼写错误,因为上面的 favouriesfavourites
  • 我的问题中的错字只是我在手机上打字时的一个错误(自动更正做了它的事情),但是我的代码没有错字并经过仔细检查。很惊讶没有其他人遇到过这个问题。 @Bradley,你能像我描述的那样尝试复制这个吗?你可能会惊讶于它的行为就像我解释的那样。
  • 我解决了这个问题,请参阅上面我对 Frank 的评论。感谢所有的帮助。
猜你喜欢
  • 2022-12-14
  • 2018-10-11
  • 2011-08-04
  • 2018-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-23
相关资源
最近更新 更多