好的,我有一个视图控制器A它像这样呈现视图控制器B。
@IBAction func presentView(_ sender: Any) {
let storyBoard : UIStoryboard = UIStoryboard(name: "main", bundle:nil)
let vc = storyBoard.instantiateViewController(withIdentifier: "Popout") as! PopoutWindow
vc.modalTransitionStyle = .coverVertical
vc.modalPresentationStyle = .overFullScreen
self.present(vc, animated:true, completion:nil)
}
当我用完视图控制器B时,我像这样解散它。
let vc = WellnessPlanEnrollmentController()
self.dismiss(animated: true, completion: {
vc.refreshView()
})
然后我调用的函数试图用视图控制器b的新数据更新我的UI然而,当我重新加载第一个视图时,我得到一个奇怪的崩溃说我试图更新的标签是nil
func refreshView() {
DispatchQueue.main.async {
self._petNameLabel.text = self.object.name
// crashes here because my label is nil???????
}
}
错误:FirstViewController.swift:128: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
我觉得这是因为当我调用函数时视图不在焦点中,但我不确定。
失败是因为您创建了一个新的WellnessPlanEnrollmentController
实例。这个实例没有连接到任何Storyboard或View,所以它所有的outlet都是nil。
可能的解决方案:
在控制器B
中创建一个委托,并在呈现前分配它,在解散后调用它。