Firebase каждый раз возвращает разные значения - PullRequest
0 голосов
/ 03 мая 2018

Я использую Firebase, чтобы проверить, печатает пользователь или нет.

Но каждый раз, когда я запрашиваю значения из Firebase. Виды ценностей разные. Я имею в виду, что иногда значения - это массив, словарь, массив с нулевым значением ... Поэтому, когда я пытался проанализировать это значение, мое приложение зависало.

Вот мой код:

- (void)listenUserTypingGate {

    __weak typeof(self)this = self;

    [[_userTypingRef queryOrderedByKey] observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {
        if (this && snapshot.exists) {
            NSDictionary* typingData = snapshot.value;
            NSLog(@"ref: %@", _userTypingRef);
            NSLog(@"ref query: %@", [_userTypingRef queryOrderedByKey]);
            NSLog(@"data: %@", typingData);
        }
    }];
}

Результат:

  • Я иду к разговору 1. Это массив

ref: https://testfir -199902.firebaseio.com / test-test / user_typing / 0_1

ref ref: (/ test-test / user_typing / 0_1 { я = ". ключ"; })

данные: ( { avatar = ""; "user_typing" = 0; имя пользователя = Oanh; }, { avatar = ""; "user_typing" = 0; username = "B \ U00e9o"; } )

  • разговор 2: это массив + нулевое значение

ref: https://testfir -199902.firebaseio.com / test-test / user_typing / 2_3

ref query: (/ test-test / user_typing / 2_3 { я = ". ключ"; })

данные: ( "", "", { avatar = ""; "user_typing" = 0; username = "H \ U1ea1nh"; }, { avatar = ""; "user_typing" = 0; username = "L \ U00f9n"; } )

  • Разговор 3: это словарь

ref: https://testfir -199902.firebaseio.com / test-test / user_typing / 4_5

ref query: (/ test-test / user_typing / 4_5 { я = ". ключ"; })

данные: { 4 = { avatar = ""; "user_typing" = 0; username = "Ti \ U1ebfn"; }; 5 = { avatar = ""; "user_typing" = 0; username = "L \ U00ea"; }; }

Вот моя структура на Firebase: enter image description here

1 Ответ

0 голосов
/ 03 мая 2018

Не берите snapshot.value. Потому что у вашего последнего узла есть дочерний элемент, а не значение.

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

Здесь последний корневой узел фактически равен 0, а 1 - не 0_1.

    NSArray*childs = snap.children;
    for(int i = 0, i < childs.count  , i++ )
    {
            FIRDataSnapshot*snap = childs[i]
            NSDictionary* typingData = snap.value;
            NSLog(@"ref: %@", _userTypingRef);
            NSLog(@"ref query: %@", [_userTypingRef queryOrderedByKey]);
            NSLog(@"data: %@", typingData);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...