【发布时间】:2023-03-28 08:35:01
【问题描述】:
我找不到一个很好的例子来说明如何使用URLSession 在表格视图中缓存图像以从互联网 (API) 获取图像。
但是,我遇到了缓存问题 - 这是我目前的代码:
func configure(with urlString: String, name: String, address: String, station: String) {
var imageCache = NSCache<UIImage, String>()
loader.startAnimating()
loader.isHidden = false
guard let url = URL(string: urlString) else {
return
}
let task = URLSession.shared.dataTask(with: url) { [weak self] data, _, error in
guard let data = data, error == nil else {
return
}
let locationImage = UIImage(data: data)
imageCache.setObject(locationImage!, forKey: urlString)
imageCache[url] = locationImage
DispatchQueue.main.async {
self?.nameLabel.text = name
self?.addressLabel.text = address
self?.locationImageView.image = locationImage
self?.loader.stopAnimating()
self?.loader.isHidden = true
}
}
task.resume()
}
错误包括:
无法将“String”类型的值转换为预期的参数类型“UIImage” 'NSCache
' 类型的值没有下标 'NSCache' 要求 'String' 是类类型
【问题讨论】:
-
另外,如果
configure方法是表格视图单元类的一部分,那么您没有在适当的位置实例化缓存。而且您还应该注意 http 请求,因为您不希望最终出现重复使用的单元格被错误单元格中的内容填充的情况。 -
是的,这也是我遇到的问题 - 我的单元格中的内容不正确 - 我该如何解决这个问题?应该在哪里实例化缓存?
-
我把它移到了配置方法之外是这样的吗?或者我应该直接在方法@cristik的单元格(cellforrow)中这样做?