ios - Firebase 分页 -Swift 和 iOS。应该什么时候使用?

标签 ios swift database firebase firebase-realtime-database

我有一个包含帖子的数据库。将来,我的数据库可能会保存大量的帖子。我对要做什么感到困惑,因为我无法在到目前为止想到的几个选项之间做出决定:

1) 一次加载所有的Posts 并将它们存储到一个Posts[] 数组中,然后只在TableView 上显示所有的帖子显示它们。

2) 一次加载 10 个 Posts 并一次显示这 10 个,然后实现一个允许用户滚动并一次加载 10 个以上的功能。然后将加载的这 10 个值添加到 TableView

现在,选项 #1 看起来简单而有吸引力,因为它是我目前设置的。但是,我不确定每次用户打开显示 Posts 的页面时不断加载数百篇文章是否会出现问题。

选项 #2 看起来很复杂,因为我不知道如何使用 Firebase 一次只加载 10 个 Posts。我正在使用 .childAdded 观察来收集数据,这通常会加载所有 Posts。我的另一个想法可能没用,也可能没用,它是将所有 Posts 加载到 Posts[] 数组中,但一次只显示 10 个。此选项很有吸引力,因为用户不必在每次查看包含帖子的 TableView 时都加载每个帖子。我也很犹豫是否采用此选项,因为我将不得不大量更改我的数据结构。当前设置是:

root/posts/post-id/post-info

其中 post-info 节点包含与帖子相关的信息,但不包含索引,我觉得选项 #2 需要索引。

我被困在这里了。在这种情况下最好采取什么行动?

最佳答案

我在创建像应用程序这样的“论坛”时遇到了同样的问题。有很多线程并且一次加载它们不是正确的方法。

如果我是你,我会坚持使用方法 2:加载 X 数量的帖子,当 TableView 滚动到底部(或几乎滚动到底部)时加载额外的帖子并显示它们。

这是一个简单的例子: 您需要一个变量来保存有关应显示多少帖子的信息:

var numberOfPosts: Int = 20

使用 queryLimited 查询您的帖子:

reference.child("child").child("child").queryLimited(toLast: UInt(numberOfPosts))

这将返回最后 X 个帖子。您还应该按某个键对其进行排序,以确保您确实拥有正确顺序的最新帖子:

reference.child("child").child("child").queryOrdered(byChild:"timestamp").queryLimited(toLast: UInt(numberOfPosts))

所以想法是,第一次加载 20 个帖子。下一次它应该加载 40,等等。这就是为什么我们需要实现一些东西来识别所有的帖子都显示了,我们需要加载新的。我正在使用 scrollView 函数来做到这一点——每次我几乎到达底部时,都会加载额外的帖子。实现 scrollView didScroll:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if (scrollView.contentOffset.y + 100) >= (scrollView.contentSize.height - scrollView.frame.size.height) {
      // You have reeached bottom (well not really, but you have reached 100px less)
      // Increase post limit and read posts
      numberOfPosts += 20
      readPosts()
    }
  }

如果您在同一个类中有 UITableViewDelegate,则函数应该会自行工作,因为 TableView 使用 scrollView 委托(delegate)。

所以这应该足以让您继续前进。我这里没有实际代码,因此无法真正粘贴它来帮助您。

顺便说一下,我使用的是 .value 而不是 .childAdded 但无论如何你应该能够实现这样的东西。

关于ios - Firebase 分页 -Swift 和 iOS。应该什么时候使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45260148/

相关文章:

swift - UIBezierPath - 为单个路径绘制多个矩形

SQL 选择如果计数

ios - Swift 3 - 基于字符串变量的过滤数组

swift - 如何使用完成处理程序编写自定义函数?

ios - 我如何从我的表格 View 中删除空单元格

java - 使用 Tinkerpop 的 g.V() 时,TitanDB 是否会将完整图加载到内存中?

database - 如何从 Informix 中的名称获取约束详细信息?

ios - 我想根据我的子数组索引对数组数组进行排序

ios - 为什么我在表中插入值时 coredata 返回空数组

ios - iOS 的自定义控件总是偏移