修改 XIB 文件后应用程序崩溃

Posted

技术标签:

【中文标题】修改 XIB 文件后应用程序崩溃【英文标题】:App crash after modification on the XIB files 【发布时间】:2011-07-17 09:23:37 【问题描述】:

在RootViewController.xib上添加新的搜索栏,并与FileOwner连接后,App会崩溃。它在崩溃时报告堆栈:

2011-07-17 17:12:43.756 TableView[1397:207] *** Terminating app due to uncaught 
exception 'NSInternalInconsistencyException', reason: '-[UIViewController 
_loadViewFromNibNamed:bundle:] loaded the "RootViewController" nib but the view outlet 
 was not set.'
 *** Call stack at first throw:
 (
0   CoreFoundation                      0x00dc85a9 __exceptionPreprocess + 185

1   libobjc.A.dylib                     0x00f1c313 objc_exception_throw + 44

2   CoreFoundation                      0x00d80ef8 +[NSException raise:format:arguments:] + 136

3   CoreFoundation                      0x00d80e6a +[NSException raise:format:] + 58

4   UIKit                               0x0036a709 -[UIViewController _loadViewFromNibNamed:bundle:] + 295

5   UIKit                               0x00368134 -[UIViewController loadView] + 120

6   UIKit                               0x004c1dd8 -[UITableViewController loadView] + 80

7   UIKit                               0x0036800e -[UIViewController view] + 56

8   UIKit                               0x003667f5 -[UIViewController nextResponder] + 34

9   UIKit                               0x003874a6 -[UIResponder _containsResponder:] + 41

10  UIKit                               0x00371c4e -[UINavigationController defaultFirstResponder] + 80

11  UIKit                               0x00386647 -[UIResponder(Internal) _deepestDefaultFirstResponder] + 42

12  UIKit                               0x00386663 -[UIResponder(Internal) _deepestDefaultFirstResponder] + 70

13  UIKit                               0x00386406 -[UIResponder(Internal) _promoteDeepestDefaultFirstResponder] + 42

14  TableView                           0x00002a0a -[TableViewAppDelegate application:didFinishLaunchingWithOptions:] + 135

15  UIKit                               0x002b8c89 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1163

16  UIKit                               0x002bad88 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 439

17  UIKit                               0x002c5617 -[UIApplication handleEvent:withNewEvent:] + 1533

18  UIKit                               0x002bdabf -[UIApplication sendEvent:] + 71

19  UIKit                               0x002c2f2e _UIApplicationHandleEvent + 7576

20  GraphicsServices                    0x01720992 PurpleEventCallback + 1550

21  CoreFoundation                      0x00da9944 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52

22  CoreFoundation                      0x00d09cf7 __CFRunLoopDoSource1 + 215

23  CoreFoundation                      0x00d06f83 __CFRunLoopRun + 979

24  CoreFoundation                      0x00d06840 CFRunLoopRunSpecific + 208

25  CoreFoundation                      0x00d06761 CFRunLoopRunInMode + 97

26  UIKit                               0x002ba7d2 -[UIApplication _run] + 623

27  UIKit                               0x002c6c93 UIApplicationMain + 1160
28  TableView                           0x00002960 main + 102
29  TableView                           0x000028f1 start + 53
30  ???                                 0x00000001 0x0 + 1
 )

 terminate called after throwing an instance of 'NSException'

【问题讨论】:

【参考方案1】:

好吧,我不知道你想让我们告诉你什么,然后你的错误已经告诉你了。

由于未捕获的异常而终止应用程序 'NSInternalInconsistencyException',原因:'-[UIViewController _loadViewFromNibNamed:bundle:] 加载了“RootViewController”笔尖但是 未设置视图出口。'

那是你忘记连接你的 RootViewController 的 view outlet,所以它不知道要加载什么。 MainWindow 的 RootViewController 是要加载的第一件事,如果它不知道应该显示什么视图,则会出现上述错误。

【讨论】:

我是iphone开发的新手,感觉很奇怪,因为:应用程序运行良好,所以控制器视图应该连接到主窗口。仅在添加搜索栏后才会崩溃。顺便说一句,我用 RootViewController 连接了搜索栏。 你在 RootViewController 中用什么连接了搜索栏? 在Interface Builder中:SearchBar连接:控制点击搜索栏,然后连接到File's Owner。此外,右键单击搜索栏,并将代理连接到文件的所有者。 不是你是怎么做的,你是在 RootViewController 中将搜索栏连接到什么的。如果您查看 RootViewControllers 连接选项卡,您应该会看到将搜索栏连接到的属性的名称。 在 RootViewController.h 中,我声明了一个名为 searchbar 的 IBOutlet,它连接到我在 tableView 上创建的 UISearchBar。在您提到的连接选项卡中,UISearchBar 只有一个链接:delegate -- Outlets 部分下的 File's Owner。

以上是关于修改 XIB 文件后应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

切换到 XCode 7.0(.1) 后,自定义视图 (XIB) 在发布模式下崩溃

打开旧的 xib 文件时 xcode 5.1 崩溃

已加载的 Xib 总是在制作插座后立即崩溃

修改数据模型文件后,我的 ipad 应用程序崩溃

xib编辑在xcode5中崩溃

在 XIB 中添加手势时,iOS 应用程序崩溃并显示消息“-[UITapGestureRecognizer setFrame:]”