Я пытаюсь создать UITableView, который будет загружать сообщения и изображения из базы FireBase. Сообщения загружаются нормально, но изображения, только самая нижняя ячейка показывает изображение, в то время как другие ячейки загружают изображение только после того, как я выполню tableView.reloadData (). Я хотел бы, чтобы все изображения загружались правильно в каждую ячейку, когда пользователь открывает UITableView.
Я также использую метод кэширования, поэтому пользователь должен загрузить изображения только один раз. Пожалуйста, дайте мне знать, если у вас есть идеи!
Вот метод кеша, который я пробовал:
let imageCache = NSCache<AnyObject, AnyObject>()
var imageUrlString: String?
extension UIImageView {
func loadImageUsingCacheWithUrlString(urlString: String) {
imageUrlString = urlString
let url = NSURL(string: urlString)
image = UIImage(named: "addpic")
if let imageFromCache = imageCache.object(forKey: urlString as
AnyObject) as? UIImage {
self.image = imageFromCache
return
}
URLSession.shared.dataTask(with: url! as URL, completionHandler: {
(data, respones, error) in
if error != nil {
print(error)
return
}
DispatchQueue.main.async(execute: {
let imageToCache = UIImage(data: data!)
if imageUrlString == urlString {
self.image = imageToCache
}
imageCache.setObject(imageToCache!, forKey: urlString as
AnyObject)
tableView.reloadData()
})
}).resume()
}
}
В моем файле swift UITableViewCell я подключаю UIImage:
@IBOutlet weak var posterProfilePic: UIImageView!
Чтобы загрузить изображение из firebase / cache, я вызываю метод cache:
func getShoutoutPic() {
if let profileImageUrl = shoutout?.picsImageUrl {
self.posterProfilePic.loadImageUsingCacheWithUrlString(urlString:
profileImageUrl) }
}
Любой совет будет с благодарностью! спасибо