簡體   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