Swift:TableViewController中的UIControl在被ViewController调用时找不到nil

时间:2019-03-22 08:26:47

标签: ios swift controller null

我在情节提要中有两个viewControllers,一个ViewController(根)和一个TableViewController,它们通过推式链接相连。

TableViewController充当应用程序的设置页面,并在其中放置了多个UIControls,例如UISegmentedControlUISwitch。这些UIControls通过TableViewController链接到IBOutlets

@IBOutlet weak var mySegmentedControl: UISegmentedControl!
@IBOutlet weak var mySwitch: UISwitch!

但是,当我通过以下方式在UIControls中称呼这些ViewController时:

let tableView: TableViewController = TableViewController.init(nibName: nil, bundle: nil)

if tableView.mySwitch.isOn {
//perform actions
}

if语句弹出错误:

  

致命错误:解开可选值时意外发现nil

我认为这是因为在调用TableViewController时尚未加载UIControls,因此我尝试先调用tableView的viewDidLoad(),但错误仍然存​​在。

我该怎么办?感谢任何建议。

1 个答案:

答案 0 :(得分:1)

您不会直接调用viewDidLoad,这是在加载视图之后由UIKit完成的。并且在需要显示视图时加载视图。

如果您之前需要进入出口,可以通过以下方式强制加载

tableView.loadViewIfNeeded()

但是请记住:

  • 也许最好在相关控制器的内部 viewDidLoad而不是从外部进行。
  • 您不应将控制器变量命名为tableView。该名称建议是视图,而不是控制器。最好命名为tableViewCtrl左右。