我正在尝试将下载的图像添加到tableView单元格中的imageViews。下载的图像具有数组“文章”中的URL。
我编写了一个函数,根据存储在数组中的url来下载图像:
let urlRequest = URLRequest(url: URL(string: url)!)
let task = URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in
if error != nil {
print("error")
return
}
DispatchQueue.main.async {
self.image = UIImage(data: data!)
}
}
task.resume()
}
}
然后,在cellForRowAtIndexPath方法中:
var imageData = self.articles?[indexPath.item].imageUrl
cell.imgView.downloadImage(from: imageData!)
然而,这给了我错误:“在解开一个Optional值时意外地发现了nil”:
cell.imgView.downloadImage(from: imageData!)
你如何解决这个问题?
答案 0 :(得分:0)
根据您拥有下载代码的位置以及实际需要多长时间,当您尝试显示tableView时,很可能无法加载图像。
您需要检查cellForRowAtIndexPath
以仅使用图像,如果它是!= nil,然后在下载的结尾处添加tableView.reloadData()
答案 1 :(得分:0)
首先请告诉我文章数组中的所有网址是否有效或是否有任何空网址。 您还可以通过更新文件下载方法来解决错误
let urlRequest = URLRequest(url: URL(string: url)!)
let task = URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in
if error != nil {
print("error")
return
}
DispatchQueue.main.async {
if let _image = UIImage(data: data!) {
self.image = UIImage(data: data!)
}
}
}
task.resume()
}
当您尝试从数据中获取图像时,基本上会出现错误,并且数据将为零。因此,通过添加If-let,您可以解决错误。