Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如果ref不存在,但以后存在,则值观察器不侦听_Swift_Firebase_Firebase Realtime Database - Fatal编程技术网

Swift 如果ref不存在,但以后存在,则值观察器不侦听

Swift 如果ref不存在,但以后存在,则值观察器不侦听,swift,firebase,firebase-realtime-database,Swift,Firebase,Firebase Realtime Database,假设用户有一个节点,其中存储了其所有收藏帖子的ID(/users/$uid/favorites/$postd)。因此,在我的ViewController中,我观察/users/$uid/favorites/节点,以便获得所有喜爱的帖子,然后迭代获取帖子对象 如果用户没有收藏夹,则“收藏夹”节点尚不存在。我发现,如果在此状态下附加.value事件观察者,则当用户稍后喜欢某篇文章时(即“Favorites”引用存在时),它不会触发。如果使用.childAdded观察者,则不会发生此问题 这是一个bu

假设用户有一个节点,其中存储了其所有收藏帖子的ID(/users/$uid/favorites/$postd)。因此,在我的ViewController中,我观察/users/$uid/favorites/节点,以便获得所有喜爱的帖子,然后迭代获取帖子对象

如果用户没有收藏夹,则“收藏夹”节点尚不存在。我发现,如果在此状态下附加.value事件观察者,则当用户稍后喜欢某篇文章时(即“Favorites”引用存在时),它不会触发。如果使用.childAdded观察者,则不会发生此问题


这是一个bug还是一个特定的设计功能?还有,是否有一个解决方法…当然,不需要我使用.childAdded observer。谢谢。

它应该像您所描述的那样工作。请确保在添加
.value
事件侦听器时,您是在
观察()
listener而不是
observeSingleEvent()
listener。

感谢您的输入,但我已经使用了.observe而不是.observeSingleEvent。在这种情况下,请确保代码中没有任何打字错误,因为上面提到了
偏好
≠ <代码>收藏夹。当我在手机上打字时,我问题中的打字错误(自动更正完成了它的工作),但是,我的代码没有输入错误,并且经过了双重检查。我很惊讶没有其他人遇到这个问题。@Bradley,你能试着像我描述的那样复制这个问题吗?你可能会惊讶它的行为就像我解释的那样。我解决了这个问题,请参阅我对上面Frank的评论。感谢所有帮助。Firebase价值观e立即使用该位置的当前值。如果没有值,则会立即使用空快照触发。如果不是这样,请共享该快照。@Frank,我解决了这个问题,这是某种奇怪的安全规则的副作用,它阻止了对节点的观察。我在客户端上花了很多时间来解决这个问题-我甚至没有想到这一点。为了显示“复制行为的最小代码”,我派生了一个干净的firebase项目,该项目具有最小的节点结构,但问题没有发生。然后,我对这两个项目进行了“区分”,发现唯一的区别是安全规则。我更改了当前项目和现在的规则。值事件侦听现在按预期工作。请参阅……创建MCVE通常可以帮助您找到自己的pr问题,干得好!