繁体   English   中英

如何订购Firebase数据?

[英]How do I order Firebase data?

我正在创建一个论坛/新闻提要类型的应用程序,当前正在尝试创建实际的新闻提要/论坛。 到目前为止,我有一个表格视图,该表格视图由包含用户的显示名称,个人资料图片和帖子文本的帖子组成。

我遇到的问题是没有订购。 它以无法预测的顺序显示,每次重新启动应用程序时,该顺序都会更改。 我尝试使用“ .queryOrdered(byChild:“ Timestamp”)“,但它似乎无法正常工作。

我究竟做错了什么?

当我将您的代码简化为:

var databaseRef = Database.database().reference()
databaseRef.child("49242360/Posts").queryOrdered(byChild: "Timestamp").observe(.value, with: { (snapshot) in        
    for child in (snapshot.children) {
        let snap = child as! DataSnapshot
        let dict = snap.value as! [String:AnyObject]
        let timestamp = dict["Timestamp"]!

        print("Key \(snap.key), Timestamp \(timestamp)")
    }
})
{(error) in
    print("Error: \(error.localizedDescription)")
}

它打印:

Key -L7I6Bc5MeUgiOxkzKhF, Timestamp 1520739076.673202
Key -L7I6dBS7f43e49Xuhk1, Timestamp 1520739193.693312
Key -L7IRX8Uj89LLvymgTjA, Timestamp 1520744669.853121
Key -L7IReX4TqzXcwlbphji, Timestamp 1520744704.257354
...

第二轮:

Key -L7I6Bc5MeUgiOxkzKhF, Timestamp 1520739076.673202
Key -L7I6dBS7f43e49Xuhk1, Timestamp 1520739193.693312
Key -L7IRX8Uj89LLvymgTjA, Timestamp 1520744669.853121
Key -L7IReX4TqzXcwlbphji, Timestamp 1520744704.257354
...

因此,这在订购中似乎非常可靠。

当我将其扩展为也记录UID然后加载用户名时,我得到以下代码:

var databaseRef = Database.database().reference()
databaseRef.child("49242360/Posts").queryOrdered(byChild: "Timestamp").observe(.value, with: { (snapshot) in

    for child in (snapshot.children) {
        let snap = child as! DataSnapshot
        let dict = snap.value as! [String:AnyObject]
        let timestamp = dict["Timestamp"]!

        let userWhoPosted = dict["User"] as! String

        print("Key \(snap.key), Timestamp \(timestamp), User \(userWhoPosted)")

        databaseRef.child("49242360/Users").child(userWhoPosted).observeSingleEvent(of: .value, with: {
            (snapshot) in
            if let userDict = snapshot.value as? [String: AnyObject]
            {
                print("User \(snapshot.key), Name \(userDict["Display Name"]!)")
            }
        })
    }
})
{(error) in
    print("Error: \(error.localizedDescription)")
}

并输出:

Key -L7I6Bc5MeUgiOxkzKhF, Timestamp 1520739076.673202, User HfxlCKx4uYhf09TF8fPITdNQtlo1
Key -L7I6dBS7f43e49Xuhk1, Timestamp 1520739193.693312, User HfxlCKx4uYhf09TF8fPITdNQtlo1
Key -L7IRX8Uj89LLvymgTjA, Timestamp 1520744669.853121, User HfxlCKx4uYhf09TF8fPITdNQtlo1
Key -L7IReX4TqzXcwlbphji, Timestamp 1520744704.257354, User HfxlCKx4uYhf09TF8fPITdNQtlo1
Key -L7IS-vOHvHaSWp_HRiT, Timestamp 1520744795.927767, User HfxlCKx4uYhf09TF8fPITdNQtlo1
Key -L7IcTRvi0dL9HCPTiSE, Timestamp 1520747800.437907, User HfxlCKx4uYhf09TF8fPITdNQtlo1
Key -L7IdWlpJ8zLwI3YIvi7, Timestamp 1520748076.208767, User 2ul1ZpfLtxTv4KodiNBLUvKAcgo2
Key -L7IdboVraORS1-xTQMM, Timestamp 1520748100.956265, User 2ul1ZpfLtxTv4KodiNBLUvKAcgo2
Key -L7IgTX0XFbu9YC2mX6W, Timestamp 1520748849.399632, User 2ul1ZpfLtxTv4KodiNBLUvKAcgo2
Key -L7IvDLm1M9lmMJDmu5u, Timestamp 1520752715.24575, User 2ul1ZpfLtxTv4KodiNBLUvKAcgo2
Key -L7JOOepHWvxU6CbaEPO, Timestamp 1520760625.902419, User 2ul1ZpfLtxTv4KodiNBLUvKAcgo2
Key -L7JOS1zOsB9Tf0TCsOL, Timestamp 1520760639.73502, User 2ul1ZpfLtxTv4KodiNBLUvKAcgo2
Key -L7JWCQmnZhqmxC-vYqC, Timestamp 1520762672.943332, User 2ul1ZpfLtxTv4KodiNBLUvKAcgo2
Key -L7JhX9BImuv0DAtjeBN, Timestamp 1520765903.561222, User PQlpt0gStuNH5qICZFzTJYWrhjx1
Key -L7JhYbvMr-xvUCcZUdo, Timestamp 1520765909.560808, User PQlpt0gStuNH5qICZFzTJYWrhjx1
Key -L7KtGXoMUEgAorrfCDm, Timestamp 1520785758.446064, User PQlpt0gStuNH5qICZFzTJYWrhjx1
Key -L7KwK-VtU9vKtLg8F-x, Timestamp 1520786559.068727, User PQlpt0gStuNH5qICZFzTJYWrhjx1
Key -L7KwQRUpjEa9fDTLz3g, Timestamp 1520786585.436313, User PQlpt0gStuNH5qICZFzTJYWrhjx1
Key -L7Kwgo_XBLCjomFipQ5, Timestamp 1520786656.609396, User PQlpt0gStuNH5qICZFzTJYWrhjx1
Key -L7L-X5vy3THn_bfq7vM, Timestamp 1520787661.309544, User PQlpt0gStuNH5qICZFzTJYWrhjx1
Key -L7LcY7xebZPkIkmZ3dX, Timestamp 1520798151.346764, User PQlpt0gStuNH5qICZFzTJYWrhjx1
Key -L7NOP4oE8ezfD8XyXxs, Timestamp 1520827736.498612, User PQlpt0gStuNH5qICZFzTJYWrhjx1
Key -L7NOSlCNPTxTautJNOl, Timestamp 1520827751.563096, User PQlpt0gStuNH5qICZFzTJYWrhjx1
Key -L7NVUR_P1yu5GFgism5, Timestamp 1520829593.437312, User PQlpt0gStuNH5qICZFzTJYWrhjx1
Key -L7NZoYHvCeqXXUjOUZC, Timestamp 1520830728.45705, User PQlpt0gStuNH5qICZFzTJYWrhjx1
Key -L7NZv6K8EtI97ZRHOl7, Timestamp 1520830755.339643, User PQlpt0gStuNH5qICZFzTJYWrhjx1
Key -L7N_MvoCFV8nOszdcQn, Timestamp 1520830873.384209, User PQlpt0gStuNH5qICZFzTJYWrhjx1
Key -L7QBKRzDxu-SvGGDs8S, Timestamp 1520874641.275255, User PQlpt0gStuNH5qICZFzTJYWrhjx1
Key -L7QCQueKovJpOVhxEfR, Timestamp 1520874929.892702, User PQlpt0gStuNH5qICZFzTJYWrhjx1
User HfxlCKx4uYhf09TF8fPITdNQtlo1, Name dkkdd
User HfxlCKx4uYhf09TF8fPITdNQtlo1, Name dkkdd
User HfxlCKx4uYhf09TF8fPITdNQtlo1, Name dkkdd
User HfxlCKx4uYhf09TF8fPITdNQtlo1, Name dkkdd
User HfxlCKx4uYhf09TF8fPITdNQtlo1, Name dkkdd
User HfxlCKx4uYhf09TF8fPITdNQtlo1, Name dkkdd
User 2ul1ZpfLtxTv4KodiNBLUvKAcgo2, Name joeyhhh
User 2ul1ZpfLtxTv4KodiNBLUvKAcgo2, Name joeyhhh
User 2ul1ZpfLtxTv4KodiNBLUvKAcgo2, Name joeyhhh
User 2ul1ZpfLtxTv4KodiNBLUvKAcgo2, Name joeyhhh
User 2ul1ZpfLtxTv4KodiNBLUvKAcgo2, Name joeyhhh
User 2ul1ZpfLtxTv4KodiNBLUvKAcgo2, Name joeyhhh
User 2ul1ZpfLtxTv4KodiNBLUvKAcgo2, Name joeyhhh
User PQlpt0gStuNH5qICZFzTJYWrhjx1, Name dnndddmdmd
User PQlpt0gStuNH5qICZFzTJYWrhjx1, Name dnndddmdmd
User PQlpt0gStuNH5qICZFzTJYWrhjx1, Name dnndddmdmd
User PQlpt0gStuNH5qICZFzTJYWrhjx1, Name dnndddmdmd
User PQlpt0gStuNH5qICZFzTJYWrhjx1, Name dnndddmdmd
User PQlpt0gStuNH5qICZFzTJYWrhjx1, Name dnndddmdmd
User PQlpt0gStuNH5qICZFzTJYWrhjx1, Name dnndddmdmd
User PQlpt0gStuNH5qICZFzTJYWrhjx1, Name dnndddmdmd
User PQlpt0gStuNH5qICZFzTJYWrhjx1, Name dnndddmdmd
User PQlpt0gStuNH5qICZFzTJYWrhjx1, Name dnndddmdmd
User PQlpt0gStuNH5qICZFzTJYWrhjx1, Name dnndddmdmd
User PQlpt0gStuNH5qICZFzTJYWrhjx1, Name dnndddmdmd
User PQlpt0gStuNH5qICZFzTJYWrhjx1, Name dnndddmdmd
User PQlpt0gStuNH5qICZFzTJYWrhjx1, Name dnndddmdmd
User PQlpt0gStuNH5qICZFzTJYWrhjx1, Name dnndddmdmd
User PQlpt0gStuNH5qICZFzTJYWrhjx1, Name dnndddmdmd

尽管我绝对建议仅向每个用户加载一次(因此保留您最近已加载的用户地图),但这对我来说仍然不错。

这个:

databaseRef.child("Posts").queryOrdered(byChild: "Timestamp").observe(.value, with: { (snapshot) in

是正确的,但在数据库中你有很多的TimeStamp用相同的价值, "Timestamp" : 1.520786656609396E9,这就是为什么每次你得到一个不同的顺序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM