Ios Firebase从上一篇文章中获取数据

Ios Firebase从上一篇文章中获取数据,ios,swift,firebase,firebase-realtime-database,key,Ios,Swift,Firebase,Firebase Realtime Database,Key,每次用户登录应用程序private var currentKey:String为nil,因此调用: databaseRef.child("OMG_Pictures").queryOrdered(byChild: "timeStamp").queryLimited(toLast: 5) 它总是把旧的柱子拉起来。我如何保存当前密钥,以便用户不必每次都看到相同的帖子,而是从停止的地方继续,数据库只获取新帖子?(类似于社交媒体应用程序所做的)您希望重新分页,这要求您(在本例中)调用queryend(a

每次用户登录应用程序
private var currentKey:String
nil
,因此调用:

databaseRef.child("OMG_Pictures").queryOrdered(byChild: "timeStamp").queryLimited(toLast: 5)

它总是把旧的柱子拉起来。我如何保存当前密钥,以便用户不必每次都看到相同的帖子,而是从停止的地方继续,数据库只获取新帖子?(类似于社交媒体应用程序所做的)

您希望重新分页,这要求您(在本例中)调用
queryend(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个项目。这是必需的,因为这个新查询结果中的最后一项是我们之前已经得到的。因此,我们需要检索一个额外的项,并删除与客户端代码重叠的项


还要注意,时间戳的相同值可能在消息中多次出现。在这种情况下,您需要时间戳的值和您看到的最旧项目的键,并将它们传递到
查询绑定(atValue:…,childKey:…)

您正在寻找分页,这要求您(在这种情况下)调用
查询绑定(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个项目。这是必需的,因为这个新查询结果中的最后一项是我们之前已经得到的。因此,我们需要检索一个额外的项,并删除与客户端代码重叠的项


还要注意,时间戳的相同值可能在消息中多次出现。在这种情况下,您需要时间戳的值和您看到的最旧项目的密钥,并将它们传递到
查询结果(atValue:…,childKey:…)

好的,但当我刷新(不重新运行sim卡)应用程序时,我会从100-96开始,而不是从96或91开始。您想让我用我根据您的答案编写的代码更新问题吗?您需要在重新加载时保留信息,以便重新生成查询。这样做似乎是一个独立的问题,与Firebase几乎没有任何关系。我建议您搜索如何保存信息,因为我很确定您不是第一个尝试这样做的人。好吧,但当我刷新(不重新运行sim卡)应用程序时,我会从100-96开始,而不是从96或91开始。您想让我用我根据您的答案编写的代码更新问题吗?您需要在重新加载时保留信息,以便重新生成查询。这样做似乎是一个独立的问题,与Firebase几乎没有任何关系。我建议您搜索如何持久保存信息,因为我很确定您不是第一个尝试这样做的人。