Swift tableview填充单元格导致混合内容

时间:2017-03-25 10:40:32

标签: swift uitableview alamofire firebaseui

在我的应用中,我正在使用自定义单元格填充tableview,其中包含使用FirebaseUI库从Firebase中提取的数据。

此外,我将从开放图形数据中获取的favicon插入到单元格中。我坚持的是,当你上下移动桌子时,favicons会被断言到他们不属于的单元格。

例如: 单元格1包含指向reddit帖子的链接,因此被分配了reddit favicon。 单元格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)

    }
}

问题:这是一个异步问题,还是我在这里完全遗漏了什么?

当我向表格的末尾滚动并向上返回并重复此操作时,单元格每次都会有不同的图像。

1 个答案:

答案 0 :(得分:0)

scrapeFavicon中,修改以下错误处理条件:

if let _ = error {
    return
}

将图像设置为nil。我没有使用FirebaseUI库,因此我不知道要使用的确切代码,但如果FaviconViewUIImageView,您应该可以执行以下操作:

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

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

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