Как вести наблюдение, когда ребенка снимают с пожарной базы БД - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь синхронизировать данные между двумя устройствами, используя базу данных реального времени в Firebase.Когда я убираю ценность ребенка.Я не получаю событие наблюдателя (FIRDataEventTypeChildRemoved) для удаления дочернего элемента.

Древовидная структура:

userID
    folders
        folder_ID1 // to be deleted
            folder_name:"Home"
            folder_key:"folder_ID1"
        folder_ID2
            folder_name:"Home"
            folder_key:"folder_ID2"

Теперь, когда я удаляю дочерний элемент из моего первого устройства для папки «folder_ID1», яполучить событие в FIRDataEventTypeChildChanged наблюдателе, но не в FIRDataEventTypeChildRemoved.Поэтому я не могу удалить папку на моем втором устройстве.

[ fdb_ observeEventType:FIRDataEventTypeChildChanged withBlock:^(FIRDataSnapshot* snapshot)
 {
      // Called with the key "folders" which has only "folder_ID2" after the remove value is called
 }

[ fdb_ observeEventType:FIRDataEventTypeChildRemoved withBlock:^(FIRDataSnapshot* snapshot)
 {
      // Not called. But if I call removeValue for the child "folders" this observer is called.
 }

Этот метод используется для удаления нужного дочернего идентификатора

[[[[[[ FIRDatabase database ] reference ]
    child:currentUser_.uid ]
    child:@"folders" ]
    child:@"folder_ID1" ] removeValueWithCompletionBlock:^(NSError * _Nullable error, FIRDatabaseReference * _Nonnull ref) {
    NSLog( @"Error %@", error );
}];

Вызвана функция удалениябез ошибок.Но я не получаю событие на втором устройстве.Поэтому я не могу удалить папку на моем втором устройстве.Также при удалении child_key вызывает событие для Изменено с помощью snapshot.key «папки».У которого есть только данные папки (folder_ID2) с ним

Если я могу получить ключ, который я удалил в удаленном обозревателе, я могу удалить папку с ключом во втором устройстве.

1 Ответ

0 голосов
/ 30 января 2019

Я не уверен, почему это так.Но это сработало, когда я изменил способ, которым я беру ссылку.

Ссылка, которую я установил для наблюдателя удаления, как показано ниже

fdb_ = [ [ [ FIRDatabase database ] reference ] child:currentUser_.uid ];

И затем я изменил его на приведенный ниже код, онработал на меня.Теперь он вызывает ключ, который я удаляю (folder_ID1) при удалении наблюдателя.Мне пришлось установить обозреватель для папок вместо ключа на шаг выше.

FIRDatabaseReference* fdb = [[[[ FIRDatabase database ] reference ]
                               child:currentUser_.uid ]
                              child:@"folders" ];
[ fdb observeEventType:FIRDataEventTypeChildRemoved
             withBlock:^(FIRDataSnapshot * _Nonnull snapshot)
 {
     NSLog( @"Remove Folder remove observer %@", snapshot.key );
 }];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...