2012-02-24 61 views
0

刚开始iOS开发时,我得到了在选项卡1(第二个选项卡)中使用TableViewController创建UITabBarController时的崩溃。iOS UITabBarController问题

这里是我的代码 - AppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
diseases = [NSMutableArray arrayWithCapacity:5]; 
     Disease *disease1 = [[Disease alloc] init]; 
     Disease *disease2 = [[Disease alloc] init]; 
     Disease *disease3 = [[Disease alloc] init]; 
     Disease *disease4 = [[Disease alloc] init]; 
     Disease *disease5 = [[Disease alloc] init]; 

     disease1.name = @"disease1"; 
     disease2.name = @"disease2"; 
     disease3.name = @"disease3"; 
     disease4.name = @"disease4"; 
     disease5.name = @"disease5"; 

     [diseases addObject:disease1]; 
     [diseases addObject:disease2]; 
     [diseases addObject:disease3]; 
     [diseases addObject:disease4]; 
     [diseases addObject:disease5]; 


UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 

UINavigationController *navigationController = 
[[tabBarController viewControllers] objectAtIndex:0]; 

FirstViewController *firstViewController = [[FirstViewController alloc] initWithNibName:@"NormalBiopsy" bundle:nil]; 
firstViewController = [[tabBarController viewControllers] objectAtIndex:0]; 

DiseaseTableViewController *diseaseTableViewController = [[DiseaseTableViewController alloc] initWithNibName:@"DiseaseTableViewController" bundle:nil]; 
diseaseTableViewController = [[tabBarController viewControllers] objectAtIndex:1]; 

SecondViewController *secondViewController = [[SecondViewController alloc] 
               initWithNibName:@"TestYourSelf" bundle:nil]; 
secondViewController = [[tabBarController viewControllers] objectAtIndex:2]; 

ThirdViewController *thirdViewController = [[ThirdViewController alloc] initWithNibName:@"About" bundle:nil]; 
thirdViewController = [[tabBarController viewControllers] objectAtIndex:3]; 

// Override point for customization after application launch. 
return YES; 
} 

这导致与在DiseaseTableViewController的TableView中空白表的UITabBarController - 因为填充任何数据。 但是,如果我做

diseaseTableViewController.diseases = diseases; 

应用程序崩溃与:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-    [UINavigationController setDiseases:]: unrecognized selector sent to instance 

于是,我就添加diseaseTableViewController到navigationController:

diseaseTableViewController = [[navigationController viewControllers] objectAtIndex:1]; 

导致:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[FirstViewController viewControllers]: unrecognized selector sent to instance 

我尝试在该类实现中填充DiseaseTableViewController而不是AppDelegate,但在UI中再次以空白表格结束。

任何想法?

回答

0

我解决了这个由离开原来的AppDelegate为是,而在viewDidLoad中填充DiseaseController.diseases的数据()有点像什么@Zhang提到

0

嗯,不知道我是否正确理解你的问题,但基本上从我的理解你想创建一个带有标签栏界面的应用程序,每个标签都可以有自己的导航?

你可能想是这样的应用程序结构:

AppDelegate 
| 
| 
|___ UITabBarController 
    | 
    |__ UINavigationController1 
    | | 
    | |__ DiseaseController1 
    | 
    | 
    | 
    |__ UINavigationController2 
    | | 
    | |__ DiseaseController2 
    | 
    | 
    | 
    |__ UINavigationController3 
    | | 
    | |__ DiseaseController3 
    | 
    | 
    | 
    | 
    |__ UINavigationController4 
    | | 
    | |__ DiseaseController4 
    | 
    | 
    | 
    | 
    |__ UINavigationController5 
     | 
     |__ DiseaseController5 

所以下面这个结构,你会:

  1. 创建和设置您的UITabBarController,你根本控制器为AppDelegate中
  2. 创建您的UINavigationController将它们设置为您的UITabBarController的每个选项卡
  3. 将匹配的DiseaseViewController添加到ea你的UINavigationController的

当你处理表时,你需要记住设置表的数据源和委托。那么,哪曾DiseaseViewController您在创建表

,你需要做的是这样的:

myTable.source = self; 
myTable.delegate = self; 

凡自指DiseaseViewController您创建的表中如

// psuedocode 
@class Disease1 
{ 
    UITableView myTable; 
} 

@property (nonatomic, retain) UITableView myTable; 

@end 

// implementation code 
@implementation Disease1 

-(void)viewDidLoad() 
{ 
    . . . 
    myTable.source = self; 
    myTable.delegate = self; 
    . . . 
} 

@end 
+0

谢谢,但我想你稍稍偏出了来自我可怜的解释的问题!只有DiseaseTableViewController(有一系列疾病)在标签1(第二个标签)上,其余的是不同的视图控制器。因此,我会有5种疾病作为表中的条目(这是否有意义,或者我可以在DiseaseTableViewController的viewDidLoad方法或它的视图?)。我已经有一个UiNavigationController指向DiseasTableViewController,但不断得到该选择错误 – oliveromahony 2012-02-24 19:16:31