首页 > 解决方案 > QueryLimited(toLast:1) firebase Chat Mesenger Swift

问题描述

我正在做一个聊天信使应用程序,我想在主菜单上显示最后发送的消息,如下所示:

在此处输入图像描述

我的数据库看起来像

在此处输入图像描述

在我看来确实加载了,我正在放置 getAllMsg() 的函数

    override func viewDidLoad() {
    super.viewDidLoad()
    self.title = "Private Message"
    // Do any additional setup after loading the view.
    getAllMsg()
}

但是在我的getAllMsg()功能中,我不确定如何访问每个收件人的最后一条消息。我使用了这段代码:

func getAllMsg() {
    self.users = []

    let ref = Database.database().reference().child("privateMessages")
    ref.queryLimited(toLast: 1).observeSingleEvent(of: .childAdded) { (snapshot) in
        print(snapshot)
    }
        }

我正在将整个消息发送给我的最后一个收件人。有谁知道我该怎么做?

标签: iosswiftfirebasefirebase-realtime-database

解决方案


您正在调用Database.database().reference("privateMessages").queryLimited(toLast: 1),这意味着数据库转到/privateMessages然后获取其下的最后一个孩子。那个孩子是整个用户的消息价值,而不仅仅是最后一条消息。

如果您想要特定用户的最后一条消息,则应在该用户的节点处开始查询:

// this code assumes there is a current user
let user = Auth.auth().currentUser
let ref = Database.database().reference("privateMessages").child(user.uid)

现在您想查询该用户的消息,假设是通过时间戳或密钥(这也是按时间顺序排列的)。对于后者,你会这样做:

ref.queryOrderedByKey().queryLimited(toLast: 1).observeSingleEvent(of: .childAdded) { (snapshot) in
    print(snapshot)
}

推荐阅读