快速表视图填充单元格会导致内容混淆



在我的应用中,我正在使用自定义单元格填充表格视图,这些单元格填充了使用 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库,所以我不知道要使用的确切代码,但是如果FaviconViewUIImageView,您应该能够执行以下操作:

if let _ = error {
    customCell.FaviconView.image = nil
    return
}

否则,您必须弄清楚如何将图像设置为自己nil。但这种基本方法应该可以解决问题。

更新:经过进一步讨论并查看源代码,似乎问题出在scrapeFavicon方法上,因为每次重新加载单元格都会启动一次,并且以前的作业永远不会被取消。因此,一个单元可以运行多个作业来获取图标,并且在作业完成时加载到单元中的数据将是完全随机的。

相关内容

  • 没有找到相关文章

最新更新