На данный момент я загружаю изображение, рассказываю его в изменяемом словаре, а затем проверяем, было ли изображение уже загружено, а если нет, загрузите его и сохраните. В качестве ключа я использую indexPath
.Загрузка UITableViewCell неправильных изображений
Этот код работает, но из проведенных тестов, если я слишком быстро прокручиваю изображение ячейки, загрузит не тот, и после раскола секунды он загрузит правильный (заменив неправильное изображение).
Я всегда очищаю свое уменьшенное изображение (изображение) после того, как я вызываю метод, поэтому я не знаю, почему я получаю эту ошибку.
Я, хотя, возможно, заявление if(self.imageCache.object(forKey: cacheKey) != nil)
было правдой, и поэтому я бы получил несколько изображений, но точка останова не прекращалась сразу, когда я прокручивался вниз.
Любые идеи?
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! MovieCellController
cell.thumbnail.image = UIImage()
let cacheKey = indexPath.row
if(self.imageCache.object(forKey: cacheKey) != nil)
{
cell.thumbnail.image = self.imageCache.object(forKey: cacheKey) as? UIImage
}
else
{
DispatchQueue.global(qos: DispatchQoS.QoSClass.default).async {
if let url = NSURL(string: self.moviesCollection[indexPath.row].imageLink) {
if let data = NSData(contentsOf: url as URL) {
let image: UIImage = UIImage(data: data as Data)!
self.imageCache.setObject(image, forKey: cacheKey as NSCopying)
DispatchQueue.main.async(execute: {
cell.thumbnail.image = image
})
}
}
}
}
cell.name.text = moviesCollection[indexPath.row].name
return cell
}
вы должны ввести код ячейки в файл ячейки –
Я рекомендую использовать полностью асинхронный диспетчер загрузки, как описано в [LazyTableImages] (https://developer.apple.com/library/content/samplecode/LazyTableImages/Introduction/Intro .html), который также рассматривает прокрутку. И - как всегда, но не связанные с проблемой - вообще не используйте 'NSMutableArray/Dictionary',' NSURL', 'NSData' в Swift. – vadian