[英]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.