在imageView中展开Optional值时,意外地发现了nil

时间:2017-01-31 08:10:16

标签: ios swift

我正在尝试将下载的图像添加到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!)

你如何解决这个问题?

2 个答案:

答案 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,您可以解决错误。