我正在尝试从TabBarController加载Nib。我是通过分配selectedIndex来做到这一点的。通过索引加载的ViewController在TabBarController所在的MainWindow.xib中指示,指定要在每个Tab Bar项中加载的Nib的名称。加载工作,但如果我在ViewController中创建一个要加载的IBOutlet并将其链接到任何东西(IBOutlet的对象可以是任何类),那么它会在我指定selectedIndex的行中崩溃。
编辑>> 我有应用程序委托,其中包含一个UITabBarController,链接到在MainWindow.xib中创建的UITabBarController对象。
在那个UITabBarController对象中,有一些Tab Bar项目,每个都链接到不同的UIViewControllers。这些链接是通过属性NIB名称建立的。
我正在尝试测试将其链接到空UIViewController的第一项,在本例中我调用了TestViewController(TestViewController.h,TestViewController.m和TestViewController.xib)。我在第一个Tab Bar Item的NIB Name属性中编写了TestViewController。它有效。
现在我在TestViewController中放了一个IBOutlet UILabel。我在TestViewController.h中定义它:
#import <UIKit/UIKit.h>
@interface TestViewController : UIViewController {
UILabel *label;
}
@property (nonatomic, retain) IBOutlet UILabel *label;
@end
然后我在TestViewController.m中合成标签对象。我在TestViewController.xib中放置了一个UILabel。它仍然有效。
然后我将TestViewController中定义的标签对象链接到我在NIB文件中创建的UILabel。我编译并测试。它不起作用。它在我将selectedIndex分配给应用程序委托中定义的UITabBarController的部分崩溃。分配如下:
self.tabBarController.selectedIndex = 0;
我使用0因为我只使用第一个Tab Bar项进行测试。它与SIGABRT信号崩溃。
为什么会发生这种情况的任何想法?
答案 0 :(得分:0)
编辑可以显着改善您的问题。鉴于你告诉我们的事情,很难肯定地告诉你崩溃的原因,但我可以指出你正确的方向。
你找到导致崩溃的线,这是一个好的开始。在该行上放置一个断点并调试应用程序。当您点击断点时,请查看self.tabBarController。它没有?如果没有,它的viewControllers数组中有多少个对象?如果有一个或多个,请查看TestViewController。在其-loadView方法或UIViewController -loadView上放置断点。即使你看不到 - [UIViewController loadView]的源代码,你仍然可以看到它的效果:当你到达方法的末尾时,视图控制器的view属性应该是非零的。
此外,在崩溃发生后查看控制台。通常会有一条错误消息告诉您应用程序崩溃的原因。
答案 1 :(得分:0)
问题解决了。我忘了将链接到Tab Bar Item的UIViewController更改为TestViewController。