ViewController的出口视图首先是非零,然后从bundle加载时为nil

时间:2014-05-28 16:55:23

标签: ios uiviewcontroller bundle iboutlet

我正在使用UIViewController从包中加载initWithNibName:bundle:。如果我在其viewDidLoad中设置断点,我可以看到它已设置view。在界面生成器中查看About.xib时,我也可以看到这一点。

然而,一旦视图实际上是第一次使用(根据我的应用程序的逻辑调用[self.navigationController pushViewController:viewController animated:YES])我收到此错误:

  

* 由于未捕获的异常终止应用' NSInternalInconsistencyException',原因:' - [UIViewController   _loadViewFromNibNamed:bundle:]加载"关于"笔尖但未设置视图插座。'

这也是触发viewDidLoad的调用。很明显,在通话过程中,view首先是非零(应该是),后来显然再次变为零。

如果我在调用之前立即在调试器中键入po [viewController view],我会收到此错误(可能只是同一症状的另一个表示):

  

错误:执行被中断,原因:内部ObjC异常   断点(-3)..该过程已返回到之前的状态   表达评价。

如何将视图控制器与现有导航栏一起加载和使用,而不会遇到这些错误?

更新如果我从故事板(不一定是我的主故事板)而不是从XIB文件加载视图控制器,问题显然会消失。

2 个答案:

答案 0 :(得分:3)

在Xcode中查看xib文件时,在身份检查器中,是否设置了自定义子类来查看控制器的类?如果你设置了它,然后转到连接检查器,你会看到一个名为“view”的属性,只需将它拖到“界面”构建器中的视图中它就可以工作

答案 1 :(得分:3)

我的猜测是你覆盖了一些默认的UIViewController行为,要么使view成为weak属性,要么使用奇怪的loadView方法,要么只是不调用{{1}在你的一个被覆盖的方法中。


另一个常见错误是调用不匹配的super方法(从super调用super viewDidLoad等),当您移动代码或尝试不同的事情后,可能会发生这种情况。