使用当前的时间戳在此之前查询所有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了一个实际的时间戳,但是它的工作方式也是一样的。