Ios 在imageView中展开可选值时意外发现nil
我正在尝试将下载的图像添加到tableView单元格中的ImageView。下载的图像在数组“articles”中有URL 我编写了一个函数,根据存储在数组中的URL下载图像:Ios 在imageView中展开可选值时意外发现nil,ios,swift,Ios,Swift,我正在尝试将下载的图像添加到tableView单元格中的ImageView。下载的图像在数组“articles”中有URL 我编写了一个函数,根据存储在数组中的URL下载图像: let urlRequest = URLRequest(url: URL(string: url)!) let task = URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in
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!)
但是,这给了我一个错误:“在展开可选值时意外地发现了nil”:
cell.imgView.downloadImage(from: imageData!)
如何解决此问题?根据下载代码的位置以及实际需要的时间,您很可能在尝试显示tableView时未加载图像
您需要签入
cellforrowatinexpath
以仅在图像为的情况下使用该图像!=无,然后在下载结束时,添加tableView.reloadData()
首先请告诉我文章数组中的所有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 {
if let _image = UIImage(data: data!) {
self.image = UIImage(data: data!)
}
}
}
task.resume()
}
基本上,当您试图从数据中获取图像时,会发生错误,并且这些数据将为零。因此,通过添加If,您可以解决错误。任何感叹号都可能导致崩溃。有些东西是
nil
。学会安全地处理选项,这是语言的重要组成部分。downloadImage方法包含您的第一个bloc代码?谢谢,这非常有效:)酷。异步处理可能是一个挑战!如果你喜欢这个答案,那么请接受它。。。