自定义UItableViewCell不加载图像? 斯威夫特4

我是新的Xcode和迅速,并遇到了这个错误。 我已经search了一下,找不到这个话题。 我有一个UIImage的扩展,允许我caching图像到手机在这里:

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:

更新main.storyboard屏幕截图

这里是我的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数据库上打印一个有效的URLstring,这是令人困惑的,因为它没有加载图像。

重要

我在我的项目的其他部分使用loadImageUsingCacheWithUrlString方法,它工作正常,所以我不认为它的方法….怎么回事? 非常感谢你,如果你能解决这个问题,你是一个惊人的编码器!

我可以把一个图像在main.storyboard和它的作品…所以我不知道什么可能会出错… 🙁

更新的main.storyboard的屏幕截图

扩展名中的图像似乎很好:

代码与断点和控制台显示

不确定如果图像在Capture View层次结构中被覆盖:

查看层次结构

在故事板中, messageBackground messageImage是视图messageBackground的子视图。 在cellForRow方法的if-statement中,将messageBackground设置为隐藏

 if let imageUrl = message.imageUrl{ print(imageUrl) cell.messageImage.loadImageUsingCacheWithUrlString(urlString: imageUrl) cell.messageImage.isHidden = false; cell.messageLabel.isHidden = true cell.messageBackground.isHidden = true; //THIS IS THE CULPRIT } 

由于messageBackground是隐藏的,所以子视图也是隐藏的。 这里可能需要重新考虑你的业务逻辑。