繁体   English   中英

如何从场景委托中调用 function,该委托在视图 controller 中下载 URL?

[英]How can I call a function from scene delegate which downloads an URL in a view controller?

我正在下载我认为 controller 中的图像。 每次应用程序进入前台时,我都想更新我的图像。 我尝试调用 function 从场景委托下载图像,但不幸的是,当我尝试这样做时,我收到错误“线程 1:致命错误:在隐式展开可选值时意外发现 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”中调用下载 function 但这给了我同样的错误。

let viewController = ViewController()

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

非常感谢帮助。

如果您想在每次应用程序进入前台时开始下载任务,在视图 controller 中,那么您应该在视图 controller 的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()
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM