我从Firebase服务器收到快照,如下面的日志。现在我想循环快照中的所有键,但我的位置凌乱。
我不知道为什么会这样。任何帮助都将非常感谢
以下是打印日志的代码
NSLog(@"snapshot = %@",snapshot.value);
for (NSString *keyPath in snapshot.value) {
NSLog(@"keyPath = %@",keyPath);
}
这是日志
2016-04-20 11:48:04.177 EarCrush[5241:79090] snapshot = {
"-KFlrXzqsSa50GVnJkqk" = {
conversationID = "2886-2377";
text = Okteh;
time = "20-04-2016 11:12";
};
"-KFlrgrvdR_uj2o1ltaw" = {
conversationID = "2886-2377";
text = "How are you determining";
time = "20-04-2016 11:12";
};
"-KFlrhSBbVnx4XyWjQPy" = {
conversationID = "2886-2377";
text = "Message 2 ..... ";
time = "20-04-2016 11:12";
};
"-KFlrhzx0TK5CeSR3aAA" = {
conversationID = "2886-2377";
text = "Message 3: Hello world ";
time = "20-04-2016 11:12";
};
}
2016-04-20 11:48:04.177 EarCrush[5241:79090] keyPath = -KFlrhzx0TK5CeSR3aAA
2016-04-20 11:48:04.178 EarCrush[5241:79090] keyPath = -KFlrhSBbVnx4XyWjQPy
2016-04-20 11:48:04.179 EarCrush[5241:79090] keyPath = -KFlrXzqsSa50GVnJkqk
2016-04-20 11:48:04.179 EarCrush[5241:79090] keyPath = -KFlrgrvdR_uj2o1ltaw
答案 0 :(得分:3)
当您打印FDataSnapshot时,它会打印JSON结构。由于JSON没有为子节点定义的顺序,因此它们的显示顺序是不确定的(尽管它常常会按照它们到达此处的键的字典顺序打印子项。)
Firebase's queries可用于按特定顺序获取数据。例如,来自this question:
[[languagesRef queryOrderedByChild:@"distance"] observeEventType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) {
for ( FDataSnapshot *child in snapshot.children) {
NSLog(@"child.key = %@",child.key);
}
Firebase快照包含有关子数据排序的其他信息,在打印该快照时不会显示该信息。当您遍历快照的子项时,此排序信息用于确保上面循环中的正确顺序。