我正在使用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);
}
}];
}
结果:
参考: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”; } )
参考: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”; } )
参考: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”; }; }
答案 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);
}