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
没有变化。
您可能需要更改实施此方法的方法。
为什么在调用时单元格引用在 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
没有变化。
您可能需要更改实施此方法的方法。