在我的应用中,我正在使用自定义单元格填充表格视图,这些单元格填充了使用 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
方法上,因为每次重新加载单元格都会启动一次,并且以前的作业永远不会被取消。因此,一个单元可以运行多个作业来获取图标,并且在作业完成时加载到单元中的数据将是完全随机的。