如果数据集太大,我想在表视图上显示数据。最好的方法应该是什么?
第一种方法-我在cellForRowAtIndexPath中调用API。每次我滚动时都会发出请求,这意味着一次又一次地点击服务。也许我也可以缓存数据,但我仍然认为这不是最好的方法。
第二种方法-首先,将所有数据保存在本地,然后显示它。这意味着占用更多的内部存储空间。
哪种方法更好,或者有更好的方法吗?
您将采取什么方法取决于您的 API 是否支持分页!如果 API 不支持分页,那么您没有其他解决方案,然后一次性检索所有内容并将其显示在 tableView 中。
如果您的 API 支持分页,则可以调用以加载ViewDidLoad
中的第一页,然后实现scrollViewDidScroll
委托以检查用户何时滚动到表/集合视图的底部,并触发 Web 服务获取下一页响应。这将持续到服务器以空数组响应。
这是一个简单的滚动视图DidScroll覆盖,您可以使用它来决定用户是否到达表视图/集合视图的末尾
extension ViewController : UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let bottomEdge = scrollView.contentSize.height + scrollView.contentInset.bottom - scrollView.bounds.height
if scrollView.contentOffset.y >= bottomEdge {
//make a webservice call now
}
}
}
创建太多连接不是一个好主意。
您应该获得所有这些并在单个页面中显示少数项目。
但是由于数据太多,您有 2 个选择。将它们组合为第三种选择更好。
-
不显示任何数据,实现搜索栏,使用搜索文本请求数据。现在,您根据搜索文本请求了数据的子集。
-
请求数据子集(例如前 20 个(和 imlement
load more
按钮(您也可以使用 scrollview 的委托代替按钮(或pagination.
如果响应有图像链接,则应在cellForRowAtIndexpath中下载图像。如果您之前开始下载它们,用户将等待太多。