【问题标题】:Firebase Swift Pagination on News Feed新闻提要上的 Firebase Swift 分页
【发布时间】:2017-10-31 15:20:00
【问题描述】:

我正在创建一个 instagram 风格的提要,并试图弄清楚如何根据您关注的人对帖子进行分页。

我的数据结构如下:

 posts:
      user1:
           post1
           post2
      user2:
           post3
           post4
      user3: 
           post5
           post6
           post7

 user-following:
      user1:
           user2
           user3

所以帖子是由创建帖子的用户组织的。我也有一个当前用户关注的人的结构。所以我抓取当前用户关注的用户的 uid,然后转到帖子部分并获取这些用户的所有帖子,每个帖子都有一个 createdAt 值。

当我使用 queryByChild("createdAt") 时,它对每个用户的数据进行排序,而不是绝对排序。 因此,它对 user2 的帖子进行排序,然后是 user3 的帖子,而不是进行绝对排序,因为它以块的形式提取数据。

我需要独立于拥有新闻提要帖子的用户的最新整体帖子。我可以在快照中获取所有帖子信息,但是有没有办法对该快照进行排序?我需要找到一种方法让数据库将信息作为一个整体而不是大块进行排序,然后从该排序列表中提取最新的“x”个帖子。

否则我必须将所有内容拉入我的程序,然后将其排序到一个数组中,然后从数组中拉出最近的“x”个帖子进行分页。问题是,如果有 1000 个帖子,那将是一个巨大的数据拉动,会使应用程序超级慢并可能崩溃。有什么建议吗?

【问题讨论】:

  • Firebase 文档非常有用。查看Work with Lists of Data on iOS,其中声明 queryLimitedToLast:设置从有序结果列表的末尾返回的最大项目数。 在这种情况下,将其设置为 15,这将返回 15 'most最近的帖子。将来,请在您的问题中包含有问题的代码以及您的 Firebase 结构(作为 TEXT)。您可能想查看How to create a Minimal, Complete, and Verifiable example
  • @Dirty 如果您想让 Jay 查看您的回复,请在 cmets 中使用“@Jay”
  • @Jay 谢谢你的回复。我的问题更深入一点,我必须获取用户关注的人的帖子。因此查询将每个用户的帖子放在一个块中,然后转到下一个用户,等等。因此,一旦观察到所有数据,它就不会对帖子进行排序,而是以块的形式。因此,帖子不会被绝对排序,而只能由每个单独的用户排序。有没有办法简单地在快照中一次获取所有数据,然后对其进行排序,然后提取最后 15 个?
  • 当然。但这可能是大量数据,超出了设备的容量,还会导致 UI 缓慢。查看您的结构,您可以简单地将观察者添加到每个用户感兴趣的每个帖子/用户。即 user1 将在 user2 和用户 3 上添加观察者。因此,随着帖子的添加,他们将在事件中接收帖子.每个人只能获得最后 15 个。但是,这可能不是您想要的,因此在您的问题中添加代码将有助于我们理解此用例。
  • @Jay,我稍后会尝试在这里发布一些代码,但是是的,这并不能解决问题。帖子仍然会从用户到用户进行排序,而不是绝对排序。我需要一种方法来查看用户关注的人的所有帖子,然后在数据库中对其进行排序,然后从数据库中提取最后“x”数量的帖子。感觉这是 NoSQL 后端的一个大问题。在 SQL 系统中,我觉得您可以将关注的人和他们所有的帖子进行连接,然后排序,然后提取数据。

标签: ios swift firebase pagination firebase-realtime-database


【解决方案1】:

在我看来,唯一的方法是:

1) 浏览您关注的每个用户

2) 获取最后一个X 帖子

3) 按日期排序结果数组

4) 呈现结果数组的最后一个X

如果你有table view:

要进行无限滚动,您需要存储此数组并从中获取帖子。

刷新时 - 重新加载帖子数组。

我有相同的结构,我认为这是唯一的方法,我们可以怎么做。

希望它是正确的并有所帮助

【讨论】:

  • 感谢您的回复。然而,它仍然不能解决问题。从每个用户那里获取最后“x”个帖子并不能满足从您关注的所有用户中获取最新帖子的要求。假设您关注了 500 个人,您无法查看每个用户的最后“x”个帖子,因为无法确定 500 个用户中哪些帖子是最新的。这种结构的分页在firebase中不可行吗?
  • @Dirty 你如何为帖子节点生成 id?我有相同的结构,我正在使用 childByAutoId。我在表格视图中进行了无限滚动。用这个算法
  • 我也使用 childByAutoId。那你解决了这个问题吗?我不确定无限滚动是什么,但如果你知道这一点,请告诉我该怎么做!
  • @Dirty 无限滚动 - 下载 X 个帖子,滚动到最后,在表格视图中一次又一次地下载下 X 个帖子。我正在按照我在回答中写的方式进行操作。
猜你喜欢
  • 1970-01-01
  • 2017-12-19
  • 1970-01-01
  • 1970-01-01
  • 2013-02-07
  • 1970-01-01
  • 2017-09-01
  • 2016-07-30
  • 2011-11-08
相关资源
最近更新 更多