用户每次登录应用private var currentKey: String!
时都是nil
,因此被称为:
databaseRef.child("OMG_Pictures").queryOrdered(byChild: "timeStamp").queryLimited(toLast: 5)
,它总是拉旧的帖子。如何保存当前密钥,以便用户不必总是每次都看到相同的帖子,而是从他们停下来的地方继续,数据库仅获取新的帖子? (类似于社交媒体应用的功能)
答案 0 :(得分:4)
您要向后翻页,这要求您(在这种情况下)致电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件商品。这是必需的,因为此新查询结果中的最后一项是我们之前已经获得的。因此,我们需要检索一个额外的项目,并使用客户端代码删除重叠的项目。
还请注意,您的消息中可能多次出现相同的时间戳记值。在这种情况下,您既需要时间戳记的值,又需要您所看到的最旧项的键,并将它们都传递到queryEnding(atValue: ..., childKey: ... )
中。