【问题标题】:FireBase - Observer Remove Child at specific path not getting calledFireBase - 观察者在特定路径上移除子节点没有被调用
【发布时间】:2016-01-13 03:02:10
【问题描述】:

我确定我错过了什么,但不确定是什么。我理解“移除子”的概念,仅指父级之下的子级。但是,如果我有以下结构:

Parent
      Users
           User1
                prop1
           User2
                prop 2

我想直接删除 User1(并观察它)。这就是我尝试过的:

1.首先我们添加一个观察者

let futureRef = Firebase(url: "parent/Users/User1")
futureRef.observeEventType(.ChildRemoved, withBlock: {  ( snapshot) in
        self.gameOver.disableMatch()
                })
  1. 比我们删除

      let futureRef = Firebase(url: "parent/Users/User1")
    
            futureRef.removeValue()
    

**观察者不会被调用,我知道我可以观察所有“用户”类别,然后检查 - 但那是错误的(想想同一分支的 1000 个用户,每次删除都会被调用 * *

任何建议如何实现特定位置“删除”?

【问题讨论】:

    标签: ios xcode firebase removechild


    【解决方案1】:

    您应该观察父节点的子节点的变化。

    所以如果你观察:/parent/users

    对任何用户(User1、User2)的任何更改都会触发该事件。

    如果您像示例中那样观察 /parent/users/user1,则该节点内的任何更改(例如对 prop1 的更改)都将触发事件。

    【讨论】:

    • 但正如我上面提到的,如果我在同一类别中有 10k 行,并且每个用户都观察每个变化。似乎是个坏主意?
    • 它实际上就是这样设计的。当发生更改时:添加、编辑或删除父节点的子节点,仅将修改的节点发送到您的应用程序。因此,拥有一个包含 10000 个子用户(user1、user2、user3、user10000)的 /users/ 节点对添加、编辑或删除(性能方面)没有任何影响
    • 我一直在考虑解决方法,首先更改我要删除的孩子的孩子,观察这个变化(childChanged),做我需要的,然后删除整个孩子。听起来不错? ++ 如果是这样设计的——是不是效率低下? 10K 听起来是合法数量的子孩子。我不会尝试每次更改。可能会达到 10000^2 - 1 次误报?
    • 您不需要解决方法;让 Firebase 为您完成繁重的工作。观察 /users/ 节点,当您添加、编辑或删除用户时,您的应用程序将收到该更改的通知,并且该节点将包含在快照中。这样您就可以进行相应的处理了。
    • 正确。如果有 10k 用户在线并且所有用户都在观察 users 节点,并且有 1 个用户被删除,则所有 10k 用户都会被通知有 1 个用户被删除。因此,进入每个应用程序的数据量很小,因此不会影响带宽。该数据的发送由 Firebase 服务器处理,因此您无需真正担心。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    相关资源
    最近更新 更多