我的应用程序有多个使用 SwiftFirebase 构建的聊天室 .

其中一些房间可能有几百条消息,而更受欢迎的房间有10,000多条消息 .

我正在使用查询来限制最后100个 .

我遇到的问题是当一条新消息进入时,索引0处的消息被删除 . 当用户进入聊天时,我希望能够连续追加到我的阵列,这样如果他们向上滚动以阅读过去的消息,他们将保持与新消息相同的索引 .

有没有办法可以在下面修改我的代码? :

self.chatsRef = ref.child("ABC").child(xyz)

    self.chatsRef.queryLimited(toLast: 100).observe(.value, with: { snapshot in
        self.data.removeAll()

        self.hideProgressHUD()

        for item in snapshot.children {
            if let child = item as? DataSnapshot {
                if let dict = child.value as? NSDictionary {
                    self.shouldAdd = true

                    // filter our flagged messages
                    // set shouldAdd to false if flagged

                    // filter our blocked users
                    // set shouldAdd to false if blocked user

                    // only add if appropriate
                    if self.shouldAdd {
                        self.messageData.append(dict)
                    }
                }
            }


            // reload the tableview
            DispatchQueue.main.async {
                self.refreshControl.endRefreshing()
                self.chatRoomTableView.reloadData()
            }
        }
    })

更新:

如果我在此之后调用.childAdded,则会添加所有消息 . 我只想添加最后100个加载后用户输入的内容 .

更新2:

如果我尝试查询.childAdded以在第一个查询结束时开始(获得最后100个查询),我会得到一个内存峰值 .

更新3:如果我使用.childAdded和.childRemoved,我怎么能独立调用那些vs .childRemoved之前调用.childAdded?