在我的应用中,我使用自定义单元格填充表格 View ,其中填充了使用 FirebaseUI 库从 Firebase 提取的数据。
此外,我将从打开的图形数据中获得的网站图标插入到单元格中。我遇到的问题是,当您上下移动表格时,图标会被断言到它们不属于的单元格。
例如: 单元格 1 包含一个 Reddit 帖子的链接,因此被分配 Reddit 图标。 单元格 2 包含指向未设置网站图标的网站的链接,因此最初它是空的。
现在,如果您上下拖动表格,会发生的情况是该单元格也将获得 reddit 图标集。一段时间后,几乎每个没有图标的单元格都会有一个(错误的)图标集。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.dataSource = self.tableView.bind(to: getQuery()) { tableView, indexPath, snap in
self.tableView.dataSource = self.dataSource
self.tableView.delegate = self
let cell = tableView.dequeueReusableCell(withIdentifier: "Cellident", for: indexPath)
let customCell = cell as! CustomCellTableViewCell
let theURLString = self.getURLString(obj: snap)
let serialQueue = DispatchQueue(label: "scrapequeue")
serialQueue.sync {
self.scrapeFavicon(inputURL: theURLString, customCell: customCell)
}
}
}
func scrapeFavicon(inputURL: String, customCell: CustomCellTableViewCell) {
OGDataProvider.sharedInstance.fetchOGData(urlString: inputURL) {
[weak self] ogData, error in
if let _ = error {
return
}
let imageURL = ogData.imageUrl
let imageNSURL = NSURL(string: imageURL)
customCell.FaviconView.af_setImage(withURL: imageNSURL as URL)
}
}
问题:这是一个异步问题,还是我在这里完全遗漏了一些东西?
当我滚动到表格末尾并返回并重复此操作时,单元格每次都有不同的图像。
最佳答案
在scrapeFavicon
中,修改以下错误处理条件:
if let _ = error {
return
}
将图像设置为nil
。我没有使用过 FirebaseUI 库,所以我不知道要使用的确切代码,但是如果 FaviconView
是 UIImageView
,你应该能够执行类似的操作:
if let _ = error {
customCell.FaviconView.image = nil
return
}
否则,您必须自己弄清楚如何将图像设置为nil
。但这种基本方法应该可以解决问题。
更新:经过进一步讨论并查看源代码,问题似乎出在 scrapeFavicon
方法上,因为每次重新加载该方法都会启动一次单元格和之前的作业永远不会被取消。因此,一个单元格可以运行多个作业来获取网站图标,并且当作业完成时加载到单元格中的数据将是完全随机的。
关于快速表格 View 填充单元格会导致内容混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43015366/