我该如何从场景委托中调用将视图URL下载到视图控制器中的函数?

时间:2020-06-18 08:35:56

标签: ios swift nsurlsessiondownloadtask uiscenedelegate

我正在我的视图控制器中下载图像。我想在应用程序每次进入前台时更新图像。我尝试调用该函数以从场景委托中下载图像,但是不幸的是,当我尝试执行此操作时,出现错误“线程1:致命错误:在隐式展开Optional值时意外发现nil”。

这是我的代码,用于下载图像,除非我从场景委托中调用它,否则它可以正常工作。

        let urlSession = URLSession(configuration: .default)

        let url = URL(string: "https://jarisstoriesphotographyphoto.files.wordpress.com/2020/06/menu1.png")!

        // Create Data Task

        let dataTask = urlSession.dataTask(with: url) { [weak self] (data, _, error) in
            if let error = error {
                print(error)
            }
            if let data = data {
                DispatchQueue.main.async {
                    // Create Image and Update Image View
                    // self?.imageView.image
                    self?.imageView.image = UIImage(data: data)
                }
            }
        }
        // Start Data Task
        dataTask.resume()

这是我在场景委托中使用的代码。我还尝试在“ willConnectTo”中调用下载功能,但这给了我同样的错误。

let viewController = ViewController()

func sceneWillEnterForeground(_ scene: UIScene) {
     viewController.downloadImage()
}

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果您希望每次应用进入前台时都在视图控制器内启动下载任务,则应在视图控制器的viewWillAppear中执行该任务。这是一个示例:

class ViewController: UIViewController {
    // ...
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        let urlSession = URLSession(configuration: .default)
         let url = URL(string: "https://jarisstoriesphotographyphoto.files.wordpress.com/2020/06/menu1.png")!

         // Create Data Task

         let dataTask = urlSession.dataTask(with: url) { [weak self] (data, _, error) in
             if let error = error {
                 print(error)
             }
             if let data = data {
                 DispatchQueue.main.async {
                     // Create Image and Update Image View
                     // self?.imageView.image
                     self?.imageView.image = UIImage(data: data)
                 }
             }
         }
         // Start Data Task
         dataTask.resume()
    }
}
相关问题