如何从场景委托中调用在视图控制器中下载 URL 的函数?
How can I call a function from scene delegate which downloads an URL in a view controller?
我正在我的视图控制器中下载图像。每次应用程序进入前台时,我都想更新我的图像。我试图调用函数从场景委托下载图像,但不幸的是,当我尝试这样做时,我得到了错误 "Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value"。
这是我下载图像的代码,除了我从场景委托调用它时工作正常。
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()
}
非常感谢您的帮助。
如果您想在每次应用程序进入前台时在视图控制器中启动下载任务,那么您应该在视图控制器的 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()
}
}
我正在我的视图控制器中下载图像。每次应用程序进入前台时,我都想更新我的图像。我试图调用函数从场景委托下载图像,但不幸的是,当我尝试这样做时,我得到了错误 "Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value"。
这是我下载图像的代码,除了我从场景委托调用它时工作正常。
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()
}
非常感谢您的帮助。
如果您想在每次应用程序进入前台时在视图控制器中启动下载任务,那么您应该在视图控制器的 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()
}
}