gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:08:55 26 4
gpt4 key购买 nike

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com