线程1:致命错误:意外发现nil,同时隐式打开swift的Optional值

时间:2019-11-06 17:41:27

标签: ios swift xcode

我在从其他viewController的viewController中执行功能时遇到问题

我有两个视图控制器,一个叫做

var RandomPeople = <?php echo json_encode($rows); ?>

和其他

ubicacionContainerViewController

所以我想从ubicacionContainerViewController调用reservaViewController中的函数

所以在ReservaViewController 中,我有以下代码:

ubicacionContainerViewController

我使用上面的代码在ReservaViewController中调用了一个函数,一切正常,它被称为

但是现在let storyboard: UIStoryboard = UIStoryboard.init(name: "Main", bundle: nil) let reservaViewController: ReservaViewController = storyboard.instantiateViewController(withIdentifier: "ReservaViewController") as! ReservaViewController reservaViewController.cambiarContainer() 中有这些按钮

ReservaViewController

和此功能:

 @IBOutlet weak var btnSelectUbicacion: UIButton!
 @IBOutlet weak var btnSelectServicio: UIButton!
 @IBOutlet weak var btnSelectHora: UIButton!
 @IBOutlet weak var btnConfirmacionReserva: UIButton!

问题是当我按下func cambiarContainer() { self.btnSelectUbicacion.setBackgroundImage(#imageLiteral(resourceName: "fondo_transparente"), for: .normal) // here is the error self.btnSelectServicio.setBackgroundImage(nil, for: .normal) self.btnSelectHora.setBackgroundImage(#imageLiteral(resourceName: "fondo_transparente"), for: .normal) self.btnConfirmacionReserva.setBackgroundImage(#imageLiteral(resourceName: "fondo_transparente"), for: .normal) } 中的一个按钮来调用时出现该错误。

我尝试使用“?”

ubicacionContainerViewController

现在一切正常,但一切正常,但问题是按钮的背景图像不起作用。没什么改变。

2 个答案:

答案 0 :(得分:0)

您致电cambiarContainer时,插座尚未连接,因此代码崩溃。

删除

reservaViewController.cambiarContainer() 

并移动代码以将UI修改为viewDidLoad

func viewDidLoad() {
   super.viewDidLoad() 
   self.btnSelectUbicacion.setBackgroundImage(#imageLiteral(resourceName: "fondo_transparente"), for: .normal) // here is the error
   self.btnSelectServicio.setBackgroundImage(nil, for: .normal)
   self.btnSelectHora.setBackgroundImage(#imageLiteral(resourceName: "fondo_transparente"), for: .normal)
   self.btnConfirmacionReserva.setBackgroundImage(#imageLiteral(resourceName: "fondo_transparente"), for: .normal)
}

答案 1 :(得分:-1)

这里的问题是,您已经实例化了 ReservaViewController ,但尚未加载其视图,并且 cambiarContainer 方法调用了一个或多个(当前控制器插座);这就是为什么它向您指出引用为零。

通过添加以下行,尝试在调用 cambiarContainer 方法之前加载视图:

_ = reservaViewController.view