Как я могу вызвать функцию из делегата сцены, которая загружает URL-адрес в контроллер представления? - PullRequest
0 голосов
/ 18 июня 2020

Я загружаю изображение в свой контроллер просмотра. Я хочу обновлять свое изображение каждый раз, когда приложение выходит на передний план. Я попытался вызвать функцию для загрузки изображения из делегата сцены, но, к сожалению, я получаю сообщение об ошибке «Поток 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()
}

Помощь очень ценится.

1 Ответ

0 голосов
/ 18 июня 2020

Если вы хотите запускать задачу загрузки каждый раз, когда приложение переходит на передний план, в контроллере представления, тогда вам следует выполнять задачу в 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()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...