我正在开发一个应用程序,该应用程序记录用户何时停止滚动运动,将滚动的偏移量和经过的时间附加到本地数组,然后在用户关闭应用程序时将滚动历史记录上载到Firebase。

Firebase中的数据存储在顶部,并带有自动ID。然后,每个滚动偏移量和经过时间都存储在其父级下方的自己的自动ID子级中。在Firebase Web应用程序中,孩子的顺序正确。

我像这样从Firebase提取数据:

ghostref.queryOrderedByKey().queryLimited(toLast: UInt(1)).observe(.childAdded, with: { (snapshot) in

       guard let ghostdict = snapshot.value as? [String:[String:String]] else {
            print("failure")
            return
        }

        var downloadedghostarray = [(cameray:Float, timeelapse:Double)]()

        for key in ghostdict.keys {
            downloadedghostarray.append((cameray: Float(ghostdict[key]!["cameray"]!)!, timeelapse: Double(ghostdict[key]!["timeelapse"]!)!))
        }
}


当我获得所需的数据时,它的顺序不正确。有什么方法可以按预期顺序拉动Firebase子级?也许我也可以通过键命令快照的子级?

编辑:这是按所需顺序显示在Firebase Web应用程序中的数据:

ios - 如何按顺序获取Firebase快照中的子级列表?-LMLPHP

这是使用上面的代码呈现的数组:

ios - 如何按顺序获取Firebase快照中的子级列表?-LMLPHP

最佳答案

通过按关键字迭代节点字段并按关键字组织它们,可以有效地使列表中的元素随机化。基于哈希的字典/地图不保证顺序得到维护。

您将必须使用children迭代快照,(我相信)可以确保维持子级的顺序。此顺序应允许您将它们推入已确保顺序的另一个阵列中。

关于ios - 如何按顺序获取Firebase快照中的子级列表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53845591/

10-11 19:19
查看更多