如果数据集太大而我想在表View上显示数据。什么是最好的方法?
第一种方法 - 我在cellForRowAtIndexPath中调用API。这会在我每次滚动时发出请求,这意味着一次又一次地点击服务。也许我可以缓存数据,但我认为这不是最好的方法。
第二种方法 - 首先,在本地保存所有数据,然后显示它。这意味着占用更多的内部存储空间。
哪种方法更好或有没有更好的方法?
答案 0 :(得分:1)
您将采取什么方法取决于您的API是否支持分页!如果API不支持分页,那么你没有其他解决方案,然后在一个镜头中检索每个东西并在tableView中显示它。
如果您的API支持分页,那么您可以调用加载ViewDidLoad
中的第一页,然后实现scrollViewDidScroll
委托以检查用户何时滚动到表/ collectionView的底部并触发用于获取下一页响应的Web服务。这将持续到服务器响应空数组。
这是一个简单的scrollViewDidScroll覆盖,您可以使用它来决定用户是否到达tableView / collectionView的末尾
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
}
}
}
答案 1 :(得分:0)
创建太多连接并不是一个好主意。
您应该获得所有这些内容,并在一个页面中显示少数项目。
但是由于数据太多,你有两个选择。结合它们作为第三种选择更好。
不显示任何数据,实施搜索栏,使用搜索文本请求数据。现在,您根据搜索文本请求了一部分数据。
请求数据的子集(例如前20个)和imlement load more
按钮(而不是按钮,您也可以使用scrollview的委托)或pagination.
如果响应有图像链接,则应下载cellForRowAtIndexpath中的图像。如果您之前开始下载它们,用户将等待太多。