微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。