Firebase在FIRDataEventTypeChildChanged上发送整个数据库而不是更改数据

时间:2016-12-10 18:04:10

标签: ios swift firebase firebase-realtime-database

我希望能够收听Firebase数据库中任何子项所做的任何更改。我执行以下操作(在viewDidLoad中),它向我发送整个数据库,而不是仅向我发送已更改的子节点。

var ref : FIRDatabaseReference!
self.ref.observe(.childChanged, with: {(snapshot) in
                print(snapshot)
            })

积极的是,每次更改数据库值时都会调用它。但负面的是,它不是仅发送受影响的节点,而是返回所有具有更新节点的节点,这不是我想要的。 我是在呼唤正确的倾听者,还是这是出乎意料的行为?

2 个答案:

答案 0 :(得分:1)

这是预期的行为:如果在特定节点上注册值观察器,则只要有更改,就会使用该节点的值触发该块。

如果您想要了解JSON树中较低级别的更改,则应在树中添加该级别的观察者。

答案 1 :(得分:0)

这对我有用(目标C)[[FIRDatabase database] referenceWithPath:@"/chat_server"];

self.refGrito = [[FIRDatabase database] referenceWithPath:@"/chat_server"];

    [self.refGrito
     observeEventType:FIRDataEventTypeChildChanged
     withBlock:^(FIRDataSnapshot *snapshot) {

         NSLog(@"EVENT CHILD CHANGED FOR GRITO : %@ : %@",[snapshot key], snapshot.value);
         [self configureFirebaseProfile:snapshot];

     }];