У меня есть rss-канал, полученный через this third party library. У меня проблема при прокрутке таблицы. Всякий раз, когда я прокручиваю вниз, текст надписи меняется, но через некоторое время изображение меняется. Во время этого короткого промежутка в несколько секунд я вижу предыдущий образ этой строки. Я хочу, чтобы изображение по умолчанию просматривалось, если оно загружается в бэкэнд.Стоп Синхронная загрузка изображения в виде таблицы
Код, используемый для получения этой отложенной загрузки в их демо является:
func loadImageSynchronouslyFromURLString(_ urlString: String) -> UIImage? {
if let url = URL(string: urlString) {
let request = NSMutableURLRequest(url: url)
request.timeoutInterval = 30.0
var response: URLResponse?
let error: NSErrorPointer? = nil
var data: Data?
do {
data = try NSURLConnection.sendSynchronousRequest(request as URLRequest, returning: &response)
} catch let error1 as NSError {
error??.pointee = error1
data = nil
}
if (data != nil) {
return UIImage(data: data!)
}
}
return nil
}
Ниже приведен код, из которого эта функция вызывался:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "FeedItemCell", for: indexPath) as UITableViewCell
let item = entries![(indexPath as NSIndexPath).row]
if let imageView = cell.viewWithTag(1) as? UIImageView {
if item.mainImage != nil {
imageView.image = item.mainImage
} else {
if item.imageURLsFromDescription == nil || item.imageURLsFromDescription?.count == 0 {
item.mainImage = UIImage(named: "roundedDefaultFeed")
imageView.image = item.mainImage
}
DispatchQueue.global(qos: DispatchQoS.QoSClass.default).async(execute: {() -> Void in
for imageURLString in item.imageURLsFromDescription! {
if let image = self.loadImageSynchronouslyFromURLString(imageURLString) {
item.mainImage = image
DispatchQueue.main.async(execute: {() -> Void in
imageView.image = image
self.tableView.reloadRows(at: [indexPath], with: .automatic)
})
break;
}
}
})
}
}
return cell
}
Пожалуйста, скажите мне, как показать пустое пространство при загрузке pic после прокрутки.
Используйте 'asyn' для загрузки данных. Показывать изображение по умолчанию в вашем «imageView», пока ваши данные не будут получены с сервера. –
Используйте сторонний класс [SDWebImage] (https://github.com/rs/SDWebImage). – Ronak
@the_dahiya_boy вы можете привести пример? – Dia