2012-06-25 3 views
1

Я использую XCode 4.2 и тестирую свою версию на iPad 5.0.Приложение с вкладками ios с несколькими видами таблиц

Я начал создавать приложение, используя стандартное приложение с вкладками в XCode, а затем добавил код, чтобы иметь 2 uitableviews внутри первой вкладки.

Он компилирует, но данные таблицы не загружаются в представление.

App delegate.h:

@interface dmbAppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate> 

@property (strong, nonatomic) UIWindow *window; 

@property (strong, nonatomic) UITabBarController *tabBarController; 

@end 

AppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 
    // Override point for customization after application launch. 
    UIViewController *viewController1 = [[[dmbFirstViewController alloc] initWithNibName:@"dmbFirstViewController" bundle:nil] autorelease]; 
    UIViewController *viewController2 = [[[dmbSecondViewController alloc] initWithNibName:@"dmbSecondViewController" bundle:nil] autorelease]; 
    self.tabBarController = [[[UITabBarController alloc] init] autorelease]; 
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil]; 
    NSLog(@"Loading first tab view from app delegate..."); 
    self.window.rootViewController = self.tabBarController; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

FirstViewController.h:

@interface dmbFirstViewController : UIViewController { 

    ReservationsTable *reservationsController; 
    WaitlistTable *waitlistController; 
    IBOutlet UITableView *reserveTable; 
    IBOutlet UITableView *waitlistTable; 
} 

FirstViewController.m:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    NSLog(@"FirstView Controller - View Loading Started"); 

    [reserveTable setDataSource:reservationsController]; 
    [waitlistTable setDataSource:waitlistController]; 

    NSLog(@"FirstView Controller - Loading Table Views.."); 

    [reserveTable setDelegate:reservationsController]; 
    [waitlistTable setDelegate:waitlistController]; 
    reservationsController.view = reservationsController.tableView; 
    waitlistController.view = waitlistController.tableView; 

    NSLog(@"FirstView Controller - View Loading Finished"); 
} 

Обе таблицы имеют .h и .m с использованием стандартных методов таблицы. Я также добавил 2 таблицы в файл nib первого вида и связал их с владельцем файла.

Обновление: ReserveTable.h:

@interface WaitlistTable : UITableViewController <UITableViewDataSource, UITableViewDelegate>{ 
     NSMutableArray *waitlistitems; 
    } 

ReserveTable.m:

- (void)viewDidLoad 
{ 
    NSLog(@"View Did Load - Wait List Table"); 
    waitlistitems = [[NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",@"6",@"8",@"9",@"10",@"11",@"12",@"13",@"14",@"15",@"16",@"17",nil] retain]; 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    // Return the number of sections. 
    NSLog(@"Inside number of section for Wait List table..."); 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    NSLog(@"Inside numberofRows for Wait List table..."); 
    // Return the number of rows in the section. 
    return [waitlistitems count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSLog(@"Inside cell for row at index path for Wait List table..."); 
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    // Configure the cell... 
    cell.textLabel.text = [NSString stringWithFormat:@"1.%@" ,[waitlistitems objectAtIndex:indexPath.row]];  
    return cell; 
} 

Мысли?

+0

Как выглядит код для резервированияController и waitListController? И где они инициализируются? –

+0

Добавлен код контроллера waitlist в вопросе выше. – anuragbh

ответ

1

Измените ваш viewDidLoad к этому:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    reservationsController = [[ReservationsTable alloc] init]; 
    waitlistController = [[WaitlistTable alloc] init]; 

    NSLog(@"FirstView Controller - View Loading Started"); 

    [reserveTable setDataSource:reservationsController]; 
    [waitlistTable setDataSource:waitlistController]; 

    NSLog(@"FirstView Controller - Loading Table Views.."); 

    [reserveTable setDelegate:reservationsController]; 
    [waitlistTable setDelegate:waitlistController]; 

    NSLog(@"FirstView Controller - View Loading Finished"); 
} 

в принципе, вы никогда не инициализирует ваш tableViewControllers (я предполагаю, что это имя их обоих, я хотел бы изменить их имена на что-то вроде «WaitlistTableViewController» и " ReservationsTableViewController ", но это только я.) Кроме того, установка« tableView »в« представление »не требуется.

Или еще лучше инициализировать их в методе init для вашего dmbFirstViewController.

Или просто использовать dmbFirstViewController как это:

dmbFirstViewController.ч:

@interface dmbFirstViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> { 

    ReservationsTable *reservationsController; 
    WaitlistTable *waitlistController; 
    IBOutlet UITableView *reserveTable; 
    IBOutlet UITableView *waitlistTable; 
    NSMutableArray *waitlistitems; 
    NSMutableArray *reserveitems; 
} 

dmbFirstViewController.m:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 


    waitlistitems = [[NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",@"6",@"8",@"9",@"10",@"11",@"12",@"13",@"14",@"15",@"16",@"17",nil] retain]; 

    NSLog(@"FirstView Controller - View Loading Started"); 

    [reserveTable setDataSource:self]; 
    [waitlistTable setDataSource:self]; 

    NSLog(@"FirstView Controller - Loading Table Views.."); 

    [reserveTable setDelegate:self]; 
    [waitlistTable setDelegate:self]; 

    NSLog(@"FirstView Controller - View Loading Finished"); 
} 

- (void)viewDidAppear:(BOOL)animated 
{ 
    [reserveTable reloadData]; 
    [waitlistTable reloadData]; 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    // Return the number of sections. 
    NSLog(@"Inside number of section for Wait List table..."); 
    if(tableView == waitlistTable) 
    { 
     //Return sections for waitlistTable 
     return 1; 
    }else{ 
     //Return sections for reservedTable 
     return 1; 
    } 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    if(tableView==waitlistTable) 
    { 
     NSLog(@"Inside numberofRows for Wait List table..."); 
     // Return the number of rows in waitlistTable section. 
     return [waitlistitems count]; 
    }else{ 
     // Return the number of rows in reservedTable section. 
     return [reserveditems count]; 
    } 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    if(tableView == waitlistTable) 
    { 
     NSLog(@"Inside cell for row at index path for Wait List table..."); 
     static NSString *CellIdentifier = @"Cell"; 

     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
     if (cell == nil) { 
      cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
     } 

     // Configure the cell... 
     cell.textLabel.text = [NSString stringWithFormat:@"1.%@" ,[waitlistitems objectAtIndex:indexPath.row]];  
     return cell; 
    } else { 
     //Create cell for reservedTable Cell 
     ..... 
     return cell; 
    } 
} 

Вы должны закончить участие около reservedTable клеток, у меня не было этого кода. Кроме того, я догадался по массиву элементов для reservedTable и не инициализировал его.

+0

Я реорганизовал имена классов и добавил ваш код для их инициализации. Это все еще не работает. – anuragbh

+0

Моим последним советом было бы попытаться перезагрузить данные после появления вашего представления. Попробуйте '[reserveTable reloadData]; [waitlistTable reloadData]; 'в методе' viewDidAppear: 'для' dmbFirstViewController' –

+0

Или, как указано ниже, используйте 'dmbFirstViewController' как' datasource' и 'delegate' для обоих' UITableView'. Я могу отправить код, если вам нужна помощь в этом. –

1

Я думаю, что в вашем firstViewController вы должны нажать взгляды. Предполагая, что reserveTable Ваш главный стол, нажмите на нее, как так

[self.view addSubView:reserveTable]; 

Кроме того, вы импортировать ReserveTable.h к вашему firstViewController?

Если да, вы должны инициализировать таблицу там.

Но что я предлагаю, однако, заключается в преобразование firstViewController в tableViewController, редактирование App Delegat х и firstViewController.h и м, а оттуда инициализировать таблицу (даже добавление другой тоже). Так что было бы проще!

+0

Да, я импортировал reseretable класс в свой файл заголовка firstviewcontroller. – anuragbh

+0

Если бы я хотел преобразовать firstviewcontroller в контроллер табличного представления, как бы я загрузил в него две разные таблицы? – anuragbh

+0

Попробуйте изменить его на tableViewController. Просто поставьте методы, которые у вас есть в вашем резервном хранилище, в firstViewController. – Phillip