现在我有一个rootViewController通过以下方式调用另一个作为nib文件的ViewController:
self.popViewController = PopViewController(nibName: "PopUpViewController_iPhone6Plus", bundle: bundle)
这个init是:
override public init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
在rootViewController实例化PopViewController之后,它通过以下方式启动它:
self.popViewController.showInView(self, animated: true)
showInView是:
func showInView(myRootViewController : MyRootViewController!, animated: Bool)
{
self.myRootViewController = myRootViewController
myRootViewController.view.addSubview(self.view)
myTextField.delegate = self
if animated
{
self.showAnimate()
}
}
其中myTextField是PopViewController的IBOutlet。我意识到,如果我将myTextField.delegate = self
放在myRootViewController.view.addSubview(self.view)
之前,那么我会收到一个错误:fatal error: unexpectedly found nil while unwrapping an Optional value
但是如果我之后说它一切都很好。
我查看了Nib files的文档,我的问题是:
当我将myTextField.delegate = self
放在myRootViewController.view.addSubview(self.view)
之前,我之所以收到错误的原因是因为IBOutlets在显示笔尖视图之前没有连接?
此外:
为什么要通过以下方式加载nib:
self.popViewController = NSBundle.mainBundle().loadNibNamed("PopViewController_iPhone6", owner: PopViewControllerSwift.self, options: nil).first as! PopViewControllerSwift
抛出错误:
'NSUnknownKeyException', reason: '[<DeckWheel.PopUpAddDeckViewControllerSwift 0x10026cbe0> setValue:forUndefinedKey:]
答案 0 :(得分:1)
使用NIB初始化视图控制器不会立即加载它。在查询视图控制器view
之前,实际上并未加载NIB。
来自the docs for UIViewController
's init(nibName:bundle:)
method:
您指定的nib文件不会立即加载。它是在第一次访问视图控制器的视图时加载的。如果要在加载nib文件后执行其他初始化,请覆盖
viewDidLoad
方法并在那里执行任务。
当然,在NIB加载之前,NIB中设置的插座连接无法连接。因此,在您查询view
之前,您的网址为nil
。