请告诉我如何解决以下问题。有一个 tableView 显示用户列表(姓名+照片)。表的数据存储在一个数组中(有一个自定义类 - 它在 Data 中有一个名称和一张图片)。
问题是,第一次显示表格时,没有加载屏幕上可见单元格的照片,当您向下滚动到下一个单元格时,所有图片都在那里,如果您返回到开头表格,然后将显示第一个单元格的图片,尽管最初它们不是。
这是我的代码的一部分:
// Здесь хранятся юзеры
var users = [UsersData]()
// Так формирую ячейки таблицы
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! ListTableViewCell
cell.userName.text = users[indexPath.row].name!
if users[indexPath.row].photo != nil {
cell.photoView.image = UIImage(data: users[indexPath.row].photo!)
}
return cell
}
我尝试以这种方式更新可见单元格 - 它没有产生任何效果:单元格被精美地更新,但没有照片。如果您向下滑动并返回,它将加载...
self.tableView.reloadRows(at: self.tableView.indexPathsForVisibleRows!, with: .fade)
问题确实是过时的数据加载。照片进入数组的速度比更新表格的命令来得慢。
我实现了一个带屏障的队列——首先我确保所有照片都已经真正加载(此时我显示一个空表),然后我执行 tableView.reloadData()
尝试在单元格中异步上传单独线程中的照片。也许它只是没有时间一次加载所有内容。