是否建议在cellForRowAtIndexPath上为大型数据集调用Web服务?

时间:2017-11-17 16:17:05

标签: ios web-services uitableview feed

如果数据集太大而我想在表View上显示数据。什么是最好的方法?

第一种方法 - 我在cellForRowAtIndexPath中调用API。这会在我每次滚动时发出请求,这意味着一次又一次地点击服务。也许我可以缓存数据,但我认为这不是最好的方法。

第二种方法 - 首先,在本地保存所有数据,然后显示它。这意味着占用更多的内部存储空间。

哪种方法更好或有没有更好的方法?

2 个答案:

答案 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)

创建太多连接并不是一个好主意。

您应该获得所有这些内容,并在一个页面中显示少数项目。

但是由于数据太多,你有两个选择。结合它们作为第三种选择更好。

  1. 不显示任何数据,实施搜索栏,使用搜索文本请求数据。现在,您根据搜索文本请求了一部分数据。

  2. 请求数据的子集(例如前20个)和imlement load more按钮(而不是按钮,您也可以使用scrollview的委托)或pagination.

  3. 如果响应有图像链接,则应下载cellForRowAtIndexpath中的图像。如果您之前开始下载它们,用户将等待太多。