Представление коллекции Xcode I ставит в очередь задачи обработки данных urlsession в функции cellForRowAtIndexpath - PullRequest
0 голосов
/ 06 марта 2019

Вот код, который получает imageView ячейки по адресу indexpath.row, url и выполняет urlSession.Но он загружает все сразу, и это не хорошо.Я хочу начать новую urlsession только тогда, когда она закончила загрузку.Как мне это сделать?

    let image = cell.viewWithTag(10) as! UIImageView
    let url = URL(string: categories[indexPath.row].imageURL)
    URLSession.shared.dataTask(with: url!) { (data, response, error) in
        if error != nil {
            print(error!)
        }
        DispatchQueue.main.async {
            UIView.transition(with: image, duration: 0.1, options: .transitionCrossDissolve, animations: {
                image.image = UIImage(data: data!)
            }, completion: nil)
        }
        }
        .resume()

1 Ответ

0 голосов
/ 06 марта 2019

cellForRowAtIndexpath вызывается, когда ячейка собирается показываться, поэтому в вашем текущем коде она будет загружать изображение при каждом появлении ячейки, вам нужно использовать SDWebImage , чтобы воспользоваться многими вещамивключая автоматический кеш

Также лучше создавать розетки для элементов внутри ячейки вместо тегов

let image = cell.viewWithTag(10) as! UIImageView
...