Firebase iOS 查询未按预期排序

Posted

技术标签:

【中文标题】Firebase iOS 查询未按预期排序【英文标题】:Firebase iOS query not ordering as expected 【发布时间】:2015-03-25 00:35:56 【问题描述】:

我已使用 childByAutoId 保存了我的数据,因此它在 Firebase 中按时间顺序排列。当我使用下面的查询进行查询,然后打印snapshot.value 时,它会按我预期的顺序打印--按时间顺序排列--,但是当我尝试枚举snapshot.value 时,并且当我尝试使用[snap.value allkeys] 获取密钥时,它们不再按时间顺序排列。我尝试使用[self.refMyOrder queryOrderedByKey][self.refMyOrders queryOrderedByChild:@"timestamp",我有一个孩子timestamp,这是纪元时间的数据类型long。但是,它仍然没有保持预期的顺序。

我了解 NSDictionary 的底层数据结构不是 有序 数据结构。

我做错了什么?

[self.refMyOrders observeSingleEventOfType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) 
    NSLog(@"snapshot.value = %@", snapshot.value);
    NSLog(@"all keys = %@", [snapshot.value allKeys]);
];

【问题讨论】:

【参考方案1】:

所以,我阅读了 Firebase ios SDK 附带的 FDataSnapshot.h 头文件,并找到了一种枚举 snapshot 的方法,以便它保持正确的顺序。

[self.refMyOrders observeSingleEventOfType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) 
    for (FDataSnapshot* child in snapshot.children) 
        NSLog(@"%@ -> %@", child.value[@"orderID"], child.value[@"timestamp"]);
    
];

这正是我想要的。我将把这个问题留给未来的用户。我找不到任何这么简单的东西。

【讨论】:

在 Firebase iOS 开发指南的查询部分中有一个示例:firebase.com/docs/ios/guide/…。但它确实隐藏得很好。 ;-) 天啊,请告诉我这不是真的......我怎样才能为 snapshot.value 实现同样的目标?

以上是关于Firebase iOS 查询未按预期排序的主要内容,如果未能解决你的问题,请参考以下文章

Firebase onAuthStateChanged 在 React App 中未按预期运行

Firebase云功能Firestore触发onWrite在本地测试时未按预期运行

iOS:到 NSArray 的 JSON 字符串未按预期工作

嵌套排序未按预期工作 ElasticSearch

身份验证状态持久性未按预期工作 ReactJS

基数排序的并行版本未按预期运行(Java)