ios - 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)
}
}
我正在将整个消息发送给我的最后一个收件人。有谁知道我该怎么做?
解决方案
您正在调用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)
}
推荐阅读
- android - dprintf(INFO...) 或 dprintf(CRITICAL...) 在 Android LK 中的位置
- javascript - 从一个node.js服务器向另一台服务器发送请求时无法下载文件
- python - 有没有办法通过 QStateMachine QState 转换传递信号参数?
- node.js - 如何根据子数组中的“中间”值过滤大数组?(Node.js)
- reactjs - 通过子组件递增计数器并在其他子组件中重用计数器
- python - 在解决回归问题时在 python 中使用虚拟变量标准化数据集
- r - 如何为每个栅格网格单元选择一个点?
- ios - iOS 14.1 升级后,我的带有 ANE 的应用程序崩溃
- google-api - 错误 400:使用 google 设备访问时的 redirect_uri_mismatch
- python - 无法使用 pip 在带有 Cuda 11.0 的 Windows 10 (x86_64) 上安装 PyTorch