Swift-如果使用Firebase查询,如何跳过.childRemoved?

时间:2018-12-11 16:38:51

标签: arrays swift firebase uitableview firebase-realtime-database

我的应用具有使用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,该如何分别调用.childRemoved和.childAdded之前的那些?

0 个答案:

没有答案