ios - UITableViewDataSourcePrefetching->prefetchRowsAt 在 indexPaths 数组中总是有 0 和 1
问题描述
我使用 UITableViewDiffableDataSource 作为我的 tableView 的数据源。在初始加载时,从服务器获取 8 个项目并显示。当我尝试滚动时,
func tableView(_ tableView: UITableView, prefetchRowsAt indexPaths: [IndexPath]) {
被调用,但indexPaths
总是有 0 和/或 1。请求预取 10、11、12 等行的请求永远不会递增。我在这里想念什么?
解决方案
来自苹果文档:
表格视图不会立即为需要的单元格调用此方法,因此您的数据源对象也必须能够获取数据本身。
这种方法由文档提供:
tableView( :prefetchRowsAt:) 方法不必为表格视图中的每个单元格调用。因此,您的 tableView( :cellForRowAt:) 实现必须能够应对以下潜在情况:
- 数据已通过预取请求加载,并准备好显示。
- 当前正在预取数据,但尚不可用。
- 尚未要求提供数据。
处理所有这些情况的一种方法是使用 Operation 为每一行加载数据。您创建 Operation 对象并将其存储在 prefetch 方法中。然后,数据源方法可以检索操作和结果,或者如果它不存在则创建它。
推荐阅读
- java - 读取响应时出现 IllegalStateException
- python - 用于过滤 Cassandra 的 pyspark 数据帧的时间戳的正确格式
- c - 如何迭代地编写阿克曼函数?
- php - Opencart 搜索引擎优化网址问题
- sql - Xcart - 如何从 Xcart 中的表中删除行
- swift - 日期不能快速转换为 AM/PM 格式
- c - 如何在缓冲区/数组中缓存部分数据,并将其他所有内容存储在 C 中的数据结构成员中
- android - 将图像缩放到itextpdf中的表格单元格
- css - 可拖动元素超出缩放容器上的光标
- asp.net-core - 将 Net Core 2.0 API 迁移到 Net Core 3.1