使用当前的时间戳在此之前查询所有post
我保证一个EASY阅读:)
你好,我现在卡住了。 我想查询从最新的post开始,而不是最旧的post的所有post。 为什么? 因为它是我可以在我的tableView中包含分页的唯一方法。 (这意味着当用户到底时重新加载)
比方说,我有10个post,从最老的#1和最新的#10开始: 1,2,…,10如果我查询限于前5个职位,我得到[1,2,3,4,5]然后我倒过来的数组,它将显示我的桌面视图[5,4,3,2,1]从5开始。
问题 :一旦用户到达tableview的底部,如果我查询下一个5个post,从最后一个post的时间戳开始,我得到… [6,7,8,9,10]
但现在我的表格视图是不正确的,因为它会显示[5,4,3,2,1,10,9,8,7,6]我希望如果我可以使用当前设备date作为时间戳并查询之前的所有post,如下所示:我实质上可以得到[10,9,8,7,6],那么当用户到达底部时: [10,9,8,7,6,5,4,3,2 ,1]
let todayTime:TimeInterval = NSDate()。timeIntervalSince1970
FIRDatabase.database().reference().child("post").child(animal).queryOrderedByValue().queryEnding(atValue: todayTime, childKey: "datePost").queryLimited(toLast: 5).observe(.value, with: {(snapshot) in
给定以下结构
messages msg_0 msg: "oldest message" timestamp: -1 msg_1 msg: "hello" timestamp: -4 msg_2 msg: "hello" timestamp: -2 msg_3 msg: "newest message" timestamp: -5 msg_4 msg: "hello" timestamp: -3
和下面的代码
let messagesRef = self.ref.child("messages") let queryRef = messagesRef.queryOrdered(byChild: "timestamp") queryRef.observe(.childAdded, with: { snapshot in let key = snapshot.key print(key) })
输出将是
msg_3 <-newest message msg_1 msg_4 msg_2 msg_0 <-oldest message
正如你所看到的,msg_3是最新的消息,并出现在顶部,即它是查询收到的第一个快照。 如果您正在填充要用作数据源的数组,则将在索引0处添加,然后msg_1在索引1处等。
如果用户滚动并且想要加载下一个5,那么将会是时间戳6到10,其中10是最新的。
现在假设你想加载最旧的两条消息。 这是查询
let queryRef = messagesRef.queryOrdered(byChild: "timestamp") .queryStarting(atValue: -3, childKey: "timestamp") .queryEnding(atValue: -1, childKey: "timestamp")
结果
msg_2 msg_0
那么,我们要加载在下一个最老的两个
let queryRef = messagesRef.queryOrdered(byChild: "timestamp") .queryStarting(atValue: -5, childKey: "timestamp") .queryEnding(atValue: -3, childKey: "timestamp")
这给了我们
msg_1 msg_4
显然,我用-5,-4等replace了一个实际的时间戳,但是它的工作方式也是一样的。
- 如何使用FireBase向iOS发送可执行的通知?
- “将此文件复制到您的身份validation服务器” – Firebase自定义身份validation
- UNRESOLVED:协议“https”在libcurl中不受支持或禁用
- 从Firebase控制台发送无声推送通知
- 在Firebase SDK v3中使用数据库秘密进行身份validation?
- Firebase pod安装 – pod“Firebase /数据库” – 要求更高的最低部署目标
- 使用电话号码的Firebase身份validation会返回内部错误
- iOS Firebase:将snapshot.value中的所有关键点都弄乱
- 是否可以使用Firebase云消息传递(FCM)直接从设备发送PushNotifications到特殊的UDID?