每次用户登录应用程序时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: ... )

10-08 17:08