每次用户登录到应用程序时,private var currentKey: String!
都是 nil
所以这会被调用:
databaseRef.child("OMG_Pictures").queryOrdered(byChild: "timeStamp").queryLimited(toLast: 5)
它总是拉旧帖子。我怎样才能保存当前 key ,这样用户就不必每次都看到相同的帖子,而是从他们离开的地方继续,数据库只获取新帖子? (类似于社交媒体应用程序所做的)
最佳答案
您希望向后分页,这要求您(在本例中)调用 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: ... )
。
关于ios - Firebase 从上一篇文章中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52028381/