Swift Firestore UITableView cellForRowAt downloadURL 关闭时单元格错误

Swift Firestore UITableView cellForRowAt downloadURL wrong cell in closure

为什么在调用时单元格引用在 UITableView cellForRowAt 内部变得混乱: (单元格来自

guard let cell = tableView.dequeueReusableCell(withIdentifier: "venuepostcell")as? VenuePostTableViewCell else { return UITableViewCell()}

cell.tag = indexPath.row

sRef.downloadURL { downloadURL, error in
    if downloadURL != nil {
        print ("=== A \(indexPath.row)  \(cell.tag)")
        }
    }

cell.tag 应始终等于 indexPath.row.

最初是这样,但如果我有时刷新 indexPath.row 不等于 cell.tag???

初始

===  3  3
===  0  0
===  1  1
===  2  2
===  4  4

但在刷新时它会恢复为

===  0  0
===  1  1
===  4  0 <-- WRONG
===  4  4
===  3  3
===  3  1 <-- WRONG
===  2  2
===  1  3 <-- WRONG
===  0  4 <-- WRONG
===  4  0 <-- WRONG

这就是 UITableView 的实现方式。 sRef.downloadURL 是一个异步调用,这意味着在收到回调时,用户可能会滚动 table 视图并为单元格设置一个全新的标签,而 indexPath.row没有变化。

您可能需要更改实施此方法的方法。