使用当前时间戳在该时间之前查询所有帖子

时间:2017-06-19 00:21:28

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

我保证很容易阅读:)

你好,我目前被卡住了。我想查询所有帖子,从最新的帖子开始,而不是最旧的帖子。为什么?因为它是我在tableView中包含分页的唯一方法。 (这意味着当用户到达底部时重新加载)

让我们说我有10个帖子,从最早的#1和最新的#10开始: 1,2,...,10 如果我查询限于前5个帖子我得到 [1,2,3,4,5] 然后我反转数组,这将显示 [5,4,3,2, 1] 在我的tableview上以5开头。

问题:问题是一旦用户到达了桌面视图的底部,如果我查询从上一篇文章的时间戳开始的下五个帖子,我得到... [6,7,8,9,10]

但现在我的表格视图不再正确,因为它会显示 [5,4,3,2,1,10,9,8,7,6] 我希望如果我可以使用当前设备日期作为时间戳并查询之前的所有帖子,如下所示:我基本上可以获得 [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

1 个答案:

答案 0 :(得分:1)

给出以下结构

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等代替实际时间戳,但它的工作方式相同。