目前,我们有一个函数的一部分,在收集JSON数据并将其分配给数据对象之后。然后,我们遍历数据对象的图像数据值以更新图像视图。循环完成后,我们重新加载tableview。发生的问题是在每个单个对象更新后,tableview正在重新加载,从而产生闪烁和其他视觉错误。如果在所有图像数据更新后可以加载tableview,那就更好了。以下是代码的一部分:
if let extraImages = self.profileData?.images{
let extraMovieImages = extraImages.images
for image in extraMovieImages {
self.updateImage(ImageType: DownloadPic.personal, ImageString: image.filePath, completion: {_ in
DispatchQueue.main.async {
self.TableView.reloadData()
}
})
}
}
答案 0 :(得分:3)
在循环之前创建一个变量:
let expectedCount = extraMovieImages.count
然后在完成块中将其计数,当它变为0时,重新加载。
另一个想法是,如果您知道每个图像所在的行,只需重新加载该行,而不是整个表。
答案 1 :(得分:3)
你应该使用DispatchGroup
let group = DispatchGroup()
for image in extraMovieImages {
group.enter()
self.updateImage(ImageType: DownloadPic.personal, ImageString: image.filePath, completion: {_ in
group.leave()
})
}
group.notify(queue: DispatchQueue.main) {
self.TableView.reloadData()
}