2011-03-30 130 views
0

我想从TabBarController加载笔尖。我正在通过分配selectedIndex来完成此操作。通过索引加载的ViewController在TabBarController所在的MainWindow.xib中指定,指定要在每个选项卡栏项中加载的Nib的名称。加载工作,但如果我在ViewController中创建一个IBOutlet来加载并将其链接到任何东西(IBOutlet的对象可以是任何类),那么它会在我分配selectedIndex的行中崩溃。加载从UITabBarController的笔尖问题

编辑>> 我有应用程序委托,它包含一个UITabBarController链接到在MainWindow.xib中创建的UITabBarController对象。

在那个UITabBarController对象中有一些标签栏项目,每个链接到不同的UIViewControllers。这些链接通过属性NIB名称建立。

我试图测试第一个项目链接到一个空的UIViewController,在这种情况下,我叫TestViewController(TestViewController.h,TestViewController.m和TestViewController.xib创建)。我在第一个选项卡栏Item的NIB Name属性中编写了TestViewController。有用。

现在我把一个IBOutlet UILabel放在TestViewController中。我在TestViewController.h中像这样定义它:

#import <UIKit/UIKit.h> 


@interface TestViewController : UIViewController { 
    UILabel *label; 
} 

@property (nonatomic, retain) IBOutlet UILabel *label; 

@end 

然后我在TestViewController.m中综合标签对象。我将一个UILabel放在TestViewController.xib中。它仍然有效。

然后我将TestViewController中定义的标签对象链接到我在NIB文件中创建的UILabel。我编译和测试。它不起作用。它在我将selectedIndex分配给应用程序委托中定义的UITabBarController的部分中崩溃。分配是这样做的:

self.tabBarController.selectedIndex = 0; 

我使用0,因为我只用第一个选项卡栏项目进行测试。它与SIGABRT信号崩溃。

任何想法,为什么会发生这种情况?

回答

0

问题解决了。我忘了将链接到Tab Bar Item的UIViewController更改为TestViewController。

0

您的问题通过编辑得到显着改善。根据你所告诉我们的情况,很难明确地说明为什么会发生事故,但我可以指出你正确的方向。

您已经找到导致崩溃的行,这是一个好的开始。在该行放置一个断点并调试应用程序。当你点击断点时,看看self.tabBarController。它是零吗?如果不是,它的viewControllers数组中有多少个对象?如果有一个或多个,请查看您的TestViewController。在它的-loadView方法或UIViewController -loadView上放置一个断点。即使你看不到 - [UIViewController loadView]的源代码,你仍然可以观察它的效果:当你到达方法的结尾时,视图控制器的视图属性应该是非零。

此外,发生这种崩溃后,请查看控制台。通常会有一条错误消息告诉你为什么应用程序崩溃。

+0

谢谢。我认为这给了我一个提示。 viewControllers数组没有对象。 UIViewController没有进入init或loadView。我不这是为什么,它只发生在我将IBOutlet链接到UILabel时。 – jglievano 2011-03-30 23:04:47