Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在imageView中展开可选值时意外发现nil_Ios_Swift - Fatal编程技术网

Ios 在imageView中展开可选值时意外发现nil

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

我正在尝试将下载的图像添加到tableView单元格中的ImageView。下载的图像在数组“articles”中有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!)
但是,这给了我一个错误:“在展开可选值时意外地发现了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代码?谢谢,这非常有效:)酷。异步处理可能是一个挑战!如果你喜欢这个答案,那么请接受它。。。