ios - 使用当前时间戳查询该时间之前的所有帖子

标签 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 开头。

问题:问题是一旦用户到达表格 View 的底部,如果我查询从上一篇文章的时间戳开始的接下来的五篇文章,我得到... [6,7,8,9,10]

但现在我的表格 View 不再正确,因为它将显示 [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]

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

关于ios - 使用当前时间戳查询该时间之前的所有帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44620738/

相关文章:

ios - 使用 AutoLayout 以编程方式创建 UICollectionView

swift 施法失败

swift - 获取 NSLayoutConstraint 标识符不适用于 topAnchor

ios - setNeedsLayout 仅在显示后重新布局单元格

iphone - UITableView - 当单元格离开屏幕时不要卸载它们

ios - 如何使用 UITableView 和分段控件进行分页

ios - 在导航栏中添加自定义 View ,如 whatsapp

iphone - 我想用 UIPanGestureRecognizer 绘图

ios - AVCaptureSession 和 AVAudioSession 在背景音乐播放时录制视频只能工作一次

触摸时未检测到 Swift/Spritekit SKNode