【问题标题】:How can I call a function from scene delegate which downloads an URL in a view controller?如何从场景委托中调用在视图控制器中下载 URL 的函数?
【发布时间】:2020-10-08 06:17:25
【问题描述】:

我正在我的视图控制器中下载图像。每次应用程序进入前台时,我都想更新我的图像。我试图调用该函数从场景委托中下载图像,但不幸的是,当我尝试这样做时,我收到错误“线程 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”中调用下载函数,但这给了我同样的错误。

let viewController = ViewController()

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

非常感谢您的帮助。

【问题讨论】:

    标签: ios swift nsurlsessiondownloadtask uiscenedelegate


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-26
      • 2021-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      相关资源
      最近更新 更多