每次用户登录应用程序时private var currentKey: String!
都是nil
所以这被称为:
databaseRef.child("OMG_Pictures").queryOrdered(byChild: "timeStamp").queryLimited(toLast: 5)
它总是拉着旧柱子。如何保存当前密钥,以便用户不必每次都看到相同的帖子,而是从停止的位置继续,数据库只获取新帖子?(类似于社交媒体应用程序的功能)
最佳答案
您希望重新分页,这要求您(在本例中)调用queryEnding(atValue: ...)
。通过将其添加到查询中,您可以使其“跳过”您已经看到的项,实质上是对结果进行分页。
假设当前查询返回具有以下时间戳的项:
96
97
98
99
100
要使用
queryEnding(atValue: ...)
您需要知道您已经看到的最旧项的时间戳值,在本例中为96
。将其传递到下一个查询:databaseRef
.child("OMG_Pictures")
.queryOrdered(byChild: "timeStamp")
.queryEnding(atValue: 96)
.queryLimited(toLast: 6)
现在你得到:
91
92
93
94
95
96
你会注意到我们现在有6个项目。这是必需的,因为这个新查询结果中的最后一项是我们之前已经得到的。所以我们需要检索一个额外的项,并用客户端代码移除重叠的项。
还需要注意的是,相同的timestamp值可能在消息中多次出现。在这种情况下,您需要timestamp的值和您看到的最旧项的键,并将两者传递到
queryEnding(atValue: ..., childKey: ... )
。