Ios 将新图像设置为相同的imageView时为零

Ios 将新图像设置为相同的imageView时为零,ios,swift,Ios,Swift,我正在使用unsplash.it将一些图像下载到imageView。 当我单击屏幕时,屏幕图像将从unsplash和refresh imageview下载。 当我从表视图调用函数downloadImage()时,由于致命错误,控制器应用程序在self.screenImg.image=image处崩溃:在展开可选值时意外发现nil。为什么会这样 我想我应该将screenImg设置为nil,然后在screenImg中设置unsplash中的新图像,但即使在这之后,应用程序仍然会崩溃。 我怎样才能解决

我正在使用unsplash.it将一些图像下载到imageView。 当我单击屏幕时,屏幕图像将从unsplash和refresh imageview下载。 当我从表视图调用函数downloadImage()时,由于致命错误,控制器应用程序在self.screenImg.image=image处崩溃:在展开可选值时意外发现nil。为什么会这样

我想我应该将screenImg设置为nil,然后在screenImg中设置unsplash中的新图像,但即使在这之后,应用程序仍然会崩溃。 我怎样才能解决它?

MainViewController

@IBOutlet weak var screenImg: UIImageView!
@IBAction func changeImgBtn(_ sender: AnyObject) {
print("screen pressed")
    downloadImage()


}


func downloadImage() {

    let pictureURL = URL(string: "https://unsplash.it/g/750/1334/?random")!

           let session = URLSession(configuration: .default)


    let downloadPicTask = session.dataTask(with: pictureURL) { (data, response, error) in
        // The download has finished.
        if let e = error {
            print("Error downloading picture: \(e)")
        } else {

            if let res = response as? HTTPURLResponse {
                print("Downloaded cat picture with response code \(res.statusCode)")
                if let imageData = data {

                    let image = UIImage(data: imageData)

                    DispatchQueue.main.async() {
                        self.screenImg.image = image


                    }

                } else {
                    print("Couldn't get image: Image is nil")
                }
            } else {
                print("Couldn't get response code for some reason")
            }
        }
    }

    downloadPicTask.resume()
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if indexPath.row == 1 {

        if mainViewController.screenImg?.image == nil {
            print("it is nil")
        } else {
            print("it is not nil")
        }
        mainViewController.screenImg?.image = nil
        mainViewController.downloadImage()
        print("screen is pressed from menu")
        navigationController?.popViewController(animated: true)
        dismiss(animated: true, completion: nil)



    }
TableViewController

@IBOutlet weak var screenImg: UIImageView!
@IBAction func changeImgBtn(_ sender: AnyObject) {
print("screen pressed")
    downloadImage()


}


func downloadImage() {

    let pictureURL = URL(string: "https://unsplash.it/g/750/1334/?random")!

           let session = URLSession(configuration: .default)


    let downloadPicTask = session.dataTask(with: pictureURL) { (data, response, error) in
        // The download has finished.
        if let e = error {
            print("Error downloading picture: \(e)")
        } else {

            if let res = response as? HTTPURLResponse {
                print("Downloaded cat picture with response code \(res.statusCode)")
                if let imageData = data {

                    let image = UIImage(data: imageData)

                    DispatchQueue.main.async() {
                        self.screenImg.image = image


                    }

                } else {
                    print("Couldn't get image: Image is nil")
                }
            } else {
                print("Couldn't get response code for some reason")
            }
        }
    }

    downloadPicTask.resume()
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if indexPath.row == 1 {

        if mainViewController.screenImg?.image == nil {
            print("it is nil")
        } else {
            print("it is not nil")
        }
        mainViewController.screenImg?.image = nil
        mainViewController.downloadImage()
        print("screen is pressed from menu")
        navigationController?.popViewController(animated: true)
        dismiss(animated: true, completion: nil)



    }

应用程序在以下位置崩溃:self.screenImg.image=imageUse print(image)并检查是否有值。我用if进行了检查。值为零,但当我转到预览时,我实际上可以看到图像已下载。imageData是否也打印为零?
self.screenImg.image=image
:is
screenImg
nil?应用程序崩溃于:self.screenImg.image=image使用打印(image)并检查是否有值。我用if进行了检查。值为nil,但当我转到预览时,我可以看到图像已下载。imageData是否也打印nil?
self.screenImg.image=image
:is
screenImg
nil?