使用自定义起点接收有限查询
Receive limited query with custom start point
我正在使用 swift 为 iOS 和 firebase 实时数据库构建一个基本的聊天应用程序。
观察到的消息最少有 10 个。
现在,我想实现加载更早发送消息的功能。目前我正在尝试通过使用此功能来实现此目的:
let query = threadRef.child("messages").queryOrderedByKey().queryStarting(atValue: "2").queryLimited(toLast: 2)
哪个returns这个查询:
(/vYhNJ3nNQlSEEXWaJAtPLhikIZi1/messages {
i = ".key";
l = 2;
sp = 2;
vf = r;
})
这应该给我数据:
query.observeSingleEvent(of: .value, with: { (snap) in
但它只是限制了查询,并没有将起点设置到特定位置。
这是 firebase 数据库结构:
messages
-Kgzb3_b26CnkTDglNd8
date:
senderId:
senderName:
text:
-Kgzb4Qip6_jQdKRWFey
-Kgzb4ha0KZkLZeBIaxW
-Kgzb577KlNKOHxsQo9W
-Kgzb5cqIVMhRmU019Jf
有人知道如何实现这样的功能吗?
好吧,我终于找到了一种方法来做我想做的事。
首先,我误解了从 Firebase 访问数据的方式。
这就是我现在获取查询的方式:
let indexValue = messages.first?.fireBaseKey
let query = messageRef.queryOrderedByKey().queryEnding(atValue:indexValue).queryLimited(toLast: 3)
1) 获取我之前保存到自定义聊天消息中的 FireBase 密钥
2) 构建查询:
- 按键订购
- 将结尾设置为最旧的消息
- 将要查询的数组限制为所需长度
然后实际得到我使用的查询:
query.observeSingleEvent(of: .value, with: { snapshot in
for child in snapshot.children.dropLast().reversed() {
let fireSnap = (child as! FIRDataSnapshot)
//do stuff with data
}
})
1) 将查询作为单个事件获取
2) 遍历子项,我需要 dropLast() 以确保我没有任何重复的消息并将其反转以获得正确的顺序。
3) 将当前子级转换为 FIRDataSnapshot 以访问数据
因为我找不到一个简单的例子,所以我想我把我的解决方案留在这里以防其他人 运行 遇到同样的问题。
我正在使用 swift 为 iOS 和 firebase 实时数据库构建一个基本的聊天应用程序。 观察到的消息最少有 10 个。 现在,我想实现加载更早发送消息的功能。目前我正在尝试通过使用此功能来实现此目的:
let query = threadRef.child("messages").queryOrderedByKey().queryStarting(atValue: "2").queryLimited(toLast: 2)
哪个returns这个查询:
(/vYhNJ3nNQlSEEXWaJAtPLhikIZi1/messages {
i = ".key";
l = 2;
sp = 2;
vf = r;
})
这应该给我数据:
query.observeSingleEvent(of: .value, with: { (snap) in
但它只是限制了查询,并没有将起点设置到特定位置。
这是 firebase 数据库结构:
messages
-Kgzb3_b26CnkTDglNd8
date:
senderId:
senderName:
text:
-Kgzb4Qip6_jQdKRWFey
-Kgzb4ha0KZkLZeBIaxW
-Kgzb577KlNKOHxsQo9W
-Kgzb5cqIVMhRmU019Jf
有人知道如何实现这样的功能吗?
好吧,我终于找到了一种方法来做我想做的事。 首先,我误解了从 Firebase 访问数据的方式。 这就是我现在获取查询的方式:
let indexValue = messages.first?.fireBaseKey
let query = messageRef.queryOrderedByKey().queryEnding(atValue:indexValue).queryLimited(toLast: 3)
1) 获取我之前保存到自定义聊天消息中的 FireBase 密钥
2) 构建查询:
- 按键订购
- 将结尾设置为最旧的消息
- 将要查询的数组限制为所需长度
然后实际得到我使用的查询:
query.observeSingleEvent(of: .value, with: { snapshot in
for child in snapshot.children.dropLast().reversed() {
let fireSnap = (child as! FIRDataSnapshot)
//do stuff with data
}
})
1) 将查询作为单个事件获取
2) 遍历子项,我需要 dropLast() 以确保我没有任何重复的消息并将其反转以获得正确的顺序。
3) 将当前子级转换为 FIRDataSnapshot 以访问数据
因为我找不到一个简单的例子,所以我想我把我的解决方案留在这里以防其他人 运行 遇到同样的问题。