首页 > 解决方案 > 数据未转换为 UIImage

问题描述

我正在调用以在表格视图中异步下载图像,并且我也得到了响应。但是当我将该数据转换为UIImageusingUIImage(data:Value)时,我得到 nil 作为输出。我通过在浏览器中点击验证了 URL 是正确的。

下面是我在单元类中的示例代码:

class BaseTableViewCell: UITableViewCell {

    @IBOutlet var mainImageView: UIImageView!

    var object:MISArticle? {
        didSet{
            downloadFrom((object?.mainMedia()?.imageURL)!, image: mainImageView)
            print("image view size is : \(String(describing: mainImageView))")
        }
    }

    override func awakeFromNib() {
        super.awakeFromNib()

        }

    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }



}
extension BaseTableViewCell
{
    func downloadFrom(_ link:URL,image:UIImageView)
    {
        URLSession.shared.dataTask(with: link as URL, completionHandler: { (data, _, error) -> Void in
            guard let data = data, error == nil else {
                print("\nerror on download \(error)")
                return
            }
            DispatchQueue.main.async {
                print("Fetching for URL \(link)")
                print("downloaded data is: \(data as NSData)")
                print("Image size is : \(image)")
                image.image = UIImage(data: data)
                print("Image after conversion : \(image.image)")

            }
        }).resume()
    }
}

输出-:

获取 URL https://xxxx(有效)

下载的数据是:{composite, size = 176620, num_records = 3 record[0] = { from = 0, length = 37336, data_object = 0x110515410 }, record[1] = { from = 0, length = 90178, data_object = 0x11050ddf0 }, record[2] = { from = 0, length = 49106, data_object = 0x110046420 }, }> 图像大小为:>

转换后的图像:无

我不明白这里有什么问题,这些数据有效吗?还是有其他方法可以转换?请帮忙。

标签: iosswiftuitableview

解决方案


尝试使用此方法加载图像:

func downloadImage(from url: URL, completion: @escaping (_ image: UIImage?) -> ()) {
        DispatchQueue.global(qos: .userInitiated).async {
            let urlContents = try? Data(contentsOf: url)

            DispatchQueue.main.async {
                guard let imageData = urlContents else {
                    completion(nil)
                    return
                }
                completion(UIImage(data: imageData))
            }
        }
    }

推荐阅读