tableView.reload() 冻结应用程序,而 运行
tableView.reload() freezes the app while running
我有这个大问题!我从 firebase 获取数据,将其保存到数组中,然后使用 cellForRowAt 填充该行。最后我运行tableView.reload()。我必须 运行 tableView.reload() 因为 cellForRowAt 运行s 在数组可以填充 db 元素之前。
问题是,当我 运行 tableView.reload() 时,应用程序会冻结,如果我单击任何按钮,它将无法运行。按钮 运行 仅当 tableView.reload() 完成 运行ning.
I 运行 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, action: #selector(imgTapped(_:)), 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
我有这个大问题!我从 firebase 获取数据,将其保存到数组中,然后使用 cellForRowAt 填充该行。最后我运行tableView.reload()。我必须 运行 tableView.reload() 因为 cellForRowAt 运行s 在数组可以填充 db 元素之前。
问题是,当我 运行 tableView.reload() 时,应用程序会冻结,如果我单击任何按钮,它将无法运行。按钮 运行 仅当 tableView.reload() 完成 运行ning.
I 运行 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, action: #selector(imgTapped(_:)), 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