我保证会轻松阅读 :)
你好,我现在卡住了。我想查询所有从最新帖子开始的帖子,而不是最旧的帖子。为什么?因为这是我可以在 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/