修改 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 中添加手势时,iOS 应用程序崩溃并显示消息“-[UITapGestureRecognizer setFrame:]”