【发布时间】:2017-12-04 13:58:00
【问题描述】:
我是 Xcode 的新手,很快就遇到了这个错误。我搜索了一下,找不到关于这个主题的任何内容。我有一个 UIImage 扩展,允许我在这里将图像缓存到手机:
import UIKit
let imageCache = NSCache<AnyObject, AnyObject>()
extension UIImageView{
func loadImageUsingCacheWithUrlString(urlString : String)
{
self.image = nil;
// check cache for image first
if let cachedImage = imageCache.object(forKey: urlString as AnyObject) as? UIImage {
self.image = cachedImage;
return
}
let url = URL(string: urlString)
URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in
//download hit an error
if error != nil {
print(error!)
return
}
DispatchQueue.main.async {
if let downloadedImage = UIImage(data: data!){
imageCache.setObject(downloadedImage, forKey: urlString as AnyObject)
self.image = downloadedImage
}
}
}).resume()
}
}
它没有将图像加载到表格视图图像视图中:(忽略随机文本)
这也是 main.storyboard 中的 UItableView:
Updated main.storyboard screen shot
这是我的 cellForRowAt: indexPath 方法,其中图像应该被加载:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cellid" , for: indexPath) as! CustomChatTableViewCell;
let gray = UIColor(red:0.94, green:0.94, blue:0.94, alpha:1.0)
let red = UIColor(red:1.00, green:0.22, blue:0.37, alpha:1.0)
let message = messages[indexPath.item]
if message.toId == user?.toId{
cell.messageBackground.backgroundColor = red
cell.messageLabel.textColor = UIColor.white
}
else{
cell.messageBackground.backgroundColor = gray
cell.messageLabel.textColor = UIColor.black
}
cell.messageLabel.text = message.text
if let imageUrl = message.imageUrl{
print(imageUrl)
cell.messageImage.loadImageUsingCacheWithUrlString(urlString: imageUrl)
cell.messageImage.isHidden = false;
cell.messageLabel.isHidden = true
//cell.messageBackground.isHidden = true;
}
else
{
cell.messageImage.isHidden = true;
cell.messageLabel.isHidden = false
cell.messageBackground.isHidden = false;
}
return cell;
}
预期结果:
图像加载到单元格中
观察结果
图像不会加载到单元格中:( 这些代码行:
if let imageUrl = message.imageUrl{
print(imageUrl)
cell.messageImage.loadImageUsingCacheWithUrlString(urlString: imageUrl)
实际上为我的 firebase 数据库上的图像打印一个有效的 URL 字符串,这令人困惑,因为它没有加载图像。
重要
我在项目的其他部分使用loadImageUsingCacheWithUrlString 方法,它工作正常,所以我不认为它的方法......这是怎么回事?非常感谢你,如果你能解决这个问题,你就是一个了不起的程序员!!
我可以在 main.storyboard 中放一张图片,它可以工作...所以我不知道可能出了什么问题... :(
screen shot of updated main.storyboard
图像在扩展中似乎很好:
code with breakpoint and console showing
不确定图像是否在 Capture View Hierarchy 中被覆盖:
【问题讨论】:
-
最好使用 URLRequest 并设置 cachePolicy 选项
-
我认为更多信息会有所帮助。例如,哪一段代码正在执行,哪一段没有?这可能是一个逻辑错误的简单案例。你能设置一些断点并澄清代码正在经历的事件链吗?
-
@Malik 我知道 Url 正在进入 loadImageUsingCacheWithUrlString 的事实我得到了打印在控制台中的 url 女巫是上面的一行代码
-
您可以使用它,它有助于以异步方式在表格视图单元格上加载图像。 github.com/rs/SDWebImage
标签: ios swift xcode uitableview