【发布时间】:2019-01-20 23:43:19
【问题描述】:
当我单击 VC 上的后退按钮时连接速度很慢,它在访问导航控制器时崩溃。 VC 已被释放,但 setNavBarTitle 在返回另一个视图后执行。我知道函数正在执行,而 VC 已经被释放,但我不确定处理这种情况的最佳方法是什么?
override func viewWillAppear(_ animated: Bool){
super.viewWillAppear(animated)
fetchProfile(clientId: clientId) { (result, error) in
if result?.data != nil {
if (result?.success)! {
self.clientProfile = result!.data!
// Avatar
let clientImageView = UIImageView()
if let url = URL(string: result!.data!.pic_url!) {
clientImageView.image = UIImage(named: "System/defaultAvatar")
let task = URLSession.shared.dataTask(with: url) { data, response, error in
guard let data = data, error == nil else { return }
// WARNING: UIImageView.image must be used from main thread only
clientImageView.image = UIImage(data: data)
self.setNavBarTitle(image: clientImageView.image!)
}
task.resume()
}
}
}
}
}
}
private func setNavBarTitle(image: UIImage) {
// Crashes here -> Thread 11: Fatal error: Unexpectedly found nil while unwrapping an Optional value
let navigationBarHeight: CGFloat = self.navigationController!.navigationBar.frame.height
}
【问题讨论】:
-
永远不要从后台线程执行 UI 更改。
标签: ios swift uiviewcontroller uinavigationcontroller