tableView.reload在运行时冻结应用程序

问题描述

我有这个大问题!我正在从Firebase中获取数据,将其保存到数组中,然后使用cellForRowAt填充行。最后,我运行tableView.reload()。我必须运行tableView.reload(),因为cellForRowAt在数组可以填充db元素之前运行。

问题是,当我运行tableView.reload()时,应用程序冻结,如果单击任何按钮,它将无法正常工作。该按钮仅在tableView.reload()完成运行时运行。

我在填充数组后立即运行tableView.reload()。

某些代码

override func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell",for: indexPath) as! ImageTableViewCell
        
        let preview2 = imageDownload(images[counter!]["previewURL"]! as! String)
        cell.img2.imagePreview = preview2
        cell.img2.setimage(preview2,for: .normal)
        cell.img2.addTarget(self,action: #selector(imgTapped(_:)),for: .touchUpInside)
        
        let preview1 = imageDownload(images[counter!-1]["previewURL"]! as! String)
        cell.img1.imagePreview = preview1
        cell.img1.setimage(preview1,for: .normal)
        cell.img1.addTarget(self,for: .touchUpInside)
        counter = counter! - 2
        
        return cell
    }

func imageDownload(_ url: String) -> UIImage {
     let imageURL = URL(string: url)
     let imageData = try? Data(contentsOf: imageURL!)
     let image = UIImage(data: imageData!)
     return image!
}

class ImageTableViewCell: UITableViewCell {
    @IBOutlet var img1: ExtendedButton!
    @IBOutlet var img2: ExtendedButton!
}

解决方法

问题出在使用中

let imageData = try? Data(contentsOf: imageURL!)

不是因为tableView.reloadData()而阻塞当前主线程,最好使用SDWebImage