ViewController的出口视图第一个非零,然后从束加载时为零

我使用initWithNibName:bundle:从一个包中加载一个UIViewController 。 如果我在它的viewDidLoad设置了一个断点,我可以看到它的view被设置了。 在Interface Builder中查看About.xib时,我也可以看到这一点。

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

*终止应用程序由于未捕获的exception“NSInternalInconsistencyException”,原因:' – [UIViewController _loadViewFromNibNamed:bundle:]加载了“关于”笔尖,但没有设置视图sockets。

这也是触发viewDidLoad的调用。 所以显然在通话期间, view首先是非零(应该是),而后来显然变成了零。

如果在调用之前立即在debugging器中inputpo [viewController view] ,我会得到这个错误(这大概只是同一症状的另一个表示):

错误:执行被中断,原因:内部的ObjCexception断点(-3)。进程已经返回到expression式求值之前的状态。

我怎样才能加载和使用视图控制器结合现有的导航栏,而不会遇到这些错误?

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

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

我的猜测是,你重写了一些默认的UIViewController行为,要么使其view是一个weak属性,一个奇怪的loadView方法,或者只是没有调用一个你重写的方法super


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