如何解决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 举报,一经查实,本站将立刻删除。