如何仅获取firebase上更改/添加/删除的记录?

时间:2013-05-30 16:04:57

标签: objective-c ios6 cloud real-time firebase

我有这棵树:

root / companyId / customers和root / companyId / orders

以及3个以下的客户,如

根/ companyId /客户/ IdCustomer / CustomerData

我附上所有事件:

[sharedInstance.root observeEventType:FEventTypeChildChanged withBlock:^(FDataSnapshot *snapshot) {
    NSLog(@"Data get: %@", snapshot.value);
}];
[sharedInstance.root observeEventType:FEventTypeChildRemoved withBlock:^(FDataSnapshot *snapshot) {
    NSLog(@"Removed: %@", snapshot.value);
}];
[sharedInstance.root observeEventType:FEventTypeChildAdded withBlock:^(FDataSnapshot *snapshot) {
    NSLog(@"Added: %@", snapshot.value);
}];

在root / company。

我需要知道表格何时更改,以及记录。

但是,即使只有1位客户更改,FEventTypeChildChanged也会为我提供完整的子树。 FEventTypeChildRemoved仅在删除客户树时触发,而不是在删除单个客户时触发。 FEventTypeChildChanged在删除时触发,但不显示已删除的记录,但不显示已删除记录的完整子树。添加新记录时也会触发,但FEventTypeChildAdded不会触发。

如果我只监控"客户"树和更改单个值,获取整个客户列表 FEventTypeChildChanged。我只想要改变单个记录。

所以,很明显我不明白如何连线。我想获得每个表的每个记录的添加,更改,del事件的通知,而不是获取整个子树并重新处理已经同步的数据(类似于firebase仪表板的工作方式)。

1 个答案:

答案 0 :(得分:4)

child_ *事件仅适用于节点的直接子节点。如果你在/ a附加一个监听器,然后添加/ a / b,你将得到一个child_added事件。但是,如果/ a / b已经存在,并且您添加/ a / b / c,则只会收到child_changed事件,因为您只在/ a处收听,并且未添加/ a / b,它被改变了。

如果您想确切知道更改的内容,那么您应该在您关注的点添加其他侦听器。在这种情况下,在/ a和/ a / *。 Firebase旨在允许附加大量(数千)听众。

Forge通过在树中的每个级别附加侦听器来工作。这样我们就知道每个级别的确切变化。