我使用UITableViewDiffableDataSource作为tableView的数据源。在初始加载时,从服务器中提取并显示8个项目。当我尝试滚动时,
func tableView(_ tableView: UITableView, prefetchRowsAt indexPaths: [IndexPath]) {
但是indexPaths
总是具有0和/或1。请求预取10、11、12等行永远不会递增。我在这里错过了什么?
来自Apple文档:
表视图不会为它们立即需要的单元格调用此方法,因此数据源对象也必须能够获取数据本身。
这种方法由文档提供:
tableView(:prefetchRowsAt:(方法不一定对表视图中的每个单元格都调用。因此,tableView(:cellForRowAt:(的实现必须能够应对以下潜在情况:
- 数据已通过预取请求加载,准备显示
- 数据当前正在预取,但尚未可用
- 尚未请求数据
处理所有这些情况的一种方法是使用Operation加载每行的数据。您可以创建Operation对象并将其存储在预取方法中。然后,数据源方法可以检索操作和结果,或者在不存在的情况下创建它。