ViewController 的出口视图首先是非零,然后从包加载时为零
Posted
技术标签:
【中文标题】ViewController 的出口视图首先是非零,然后从包加载时为零【英文标题】:ViewController's outlet view first non-nil, then nil when loading from bundle 【发布时间】:2014-05-28 16:55:22 【问题描述】:我正在从带有initWithNibName:bundle:
的捆绑包中加载UIViewController
。如果我在其viewDidLoad
中设置断点,我可以看到它的view
已设置。在 Interface Builder 中查看 About.xib
时,我也可以看到这一点。
但是,一旦第一次实际使用视图(根据我的应用程序逻辑调用[self.navigationController pushViewController:viewController animated:YES]
),我会收到此错误:
* 由于未捕获的异常 'NSInternalInconsistencyException' 导致应用程序终止,原因:'-[UIViewController _loadViewFromNibNamed:bundle:] 加载了“关于”笔尖,但未设置视图出口。'
这也是触发viewDidLoad
的调用。所以显然在通话过程中,view
首先是非零(应该是),后来显然又变成了零。
如果我在调用之前立即在调试器中键入po [viewController view]
,我会收到此错误(这可能只是相同症状的另一种表现形式):
错误:执行被中断,原因:内部ObjC异常 breakpoint(-3)..进程已经回到之前的状态 表达式求值。
如何加载和使用视图控制器以及现有的导航栏而不遇到这些错误?
更新如果我从我的故事板(不一定是我的主故事板)而不是从 XIB 文件加载视图控制器,问题显然会消失。
【问题讨论】:
【参考方案1】:在 Xcode 中查看 xib 文件时,在身份检查器中,自定义子类是否设置为您查看控制器的类?如果你设置了,然后转到连接检查器,你会看到一个名为“view”的属性,只需将它拖到 Interface builder 中的视图中,它应该可以工作
【讨论】:
是的,这就是我所说的view
在界面生成器中查看视图控制器时也设置的意思。但问题仍然存在。【参考方案2】:
我的猜测是你覆盖了一些默认的 UIViewController
行为,要么将其 view
设置为 weak
属性,要么是一个奇怪的 loadView
方法,或者只是没有在你的覆盖方法之一中调用 super
。
另一个常见错误是调用不匹配的 super
方法(从 awakeFromNib
调用 super viewDidLoad
等),当您移动代码或尝试不同的事情后可能会发生这种情况。
【讨论】:
我过去也遇到过类似的问题,原因是没有打电话给[super loadView]
。以上是关于ViewController 的出口视图首先是非零,然后从包加载时为零的主要内容,如果未能解决你的问题,请参考以下文章
从 ViewController 到 UITableView 的 tableView 出口无效。插座无法连接到重复内容