每次查询

时间:2018-05-03 10:29:28

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

我正在使用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.这是一个数组
  

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

     

ref query:(/ test-test / user_typing / 0_1 {           我=“。key”;       })

     

数据:(               {               avatar =“”;               “user_typing”= 0;               username = Oanh;           },               {               avatar =“”;               “user_typing”= 0;               username =“B \ U00e9o”;           }       )

  • 对话2:这是一个数组+空值
  

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

     

ref query:(/ test-test / user_typing / 2_3 {           我=“。key”;       })

     

数据:(           “”           “”               {               avatar =“”;               “user_typing”= 0;               username =“H \ U1ea1nh”;           },               {               avatar =“”;               “user_typing”= 0;               username =“L \ U00f9n”;           }       )

  • 对话3:这是一本字典
  

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

     

ref query:(/ test-test / user_typing / 4_5 {       我=“。key”; })

     

数据:{       4 = {           avatar =“”;           “user_typing”= 0;           username =“Ti \ U1ebfn”;       };       5 = {           avatar =“”;           “user_typing”= 0;           username =“L \ U00ea”;       }; }

这是我在Firebase上的结构: enter image description here

1 个答案:

答案 0 :(得分:2)

不要拍摄snapshot.value。因为您的上一个节点的子节点不是值。

因此,您必须先将每个子项检索为快照,然后从特定子项中检索值..

此处最后一个Root节点实际上是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);

}