Firebase使用observeEventType FIRDataEventTypeValue检测删除

时间:2017-08-29 09:58:40

标签: ios objective-c firebase firebase-realtime-database

我正在观察使用FIRDataEventTypeValue,并根据文档将触发一个块:

“只要数据发生变化,您的块就会被触发初始数据。”

我在NSMutatbleArray中保存数据的本地缓存,并在事件触发时 我搜索缓存,如果找到一个条目,数据将使用新值进行更新。

如果在缓存中找不到该条目,我将数据添加到缓存中。

但我如何处理删除?我不想使用单独的观察者,或者这是唯一的方法。

[_myRef observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {
    NSDictionary *dict = snapshot.value;
    if (dict == (id)[NSNull null]) {
        [_cache removeAllObjects];
        [self dataEvent];
        return;
    }
   [dict enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
    // extract values from obj and store it in a cache

1 个答案:

答案 0 :(得分:0)

方法 observeEventType:withBlock 将通过所有快照中包含的数据进行调用,因此您可以“删除”数据重建整个缓存,也无需更新缓存条目。

    [_myRef observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {

    [_cache removeAllObjects];

    NSDictionary *dict = snapshot.value;
    if (dict == (id)[NSNull null]) {
        [self dataEvent];
        return;
    }

    [dict enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
    // process the dictionary and its values and store in the cache