2013-06-20 57 views
0

我不知道我在做什麼錯,但如果任何人都可以指出我在正確的方向,我將不勝感激。我正在xcode中創建一個應用程序。我目前有兩個按鈕,繼續不同的視圖控制器,這兩個視圖都由同一個類控制。在課堂中定義了不同的視圖。對於每個視圖,我還有兩個數組,每個視圖都填充了我想要在視圖中顯示的信息。這裏是來自viewcontrollers .m文件的代碼。如果我刪除出現兩個按鈕功能的斷點,但第二個按鈕顯示來自錯誤數組的信息,但會轉到正確的視圖控制器。我完全難倒了。UITableViews和UITableViewCells

#import "techTwoViewController.h" 
#import "maintInstrctViewController.h" 
#import "showTechTipsViewController.h" 
@interface techTwoViewController() 

@end 

@implementation techTwoViewController 
{ 
    NSArray *maintInstrct; 
    NSArray *techTips; 
} 
@synthesize tableView; 
@synthesize techTableView; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Initialize table data 
    maintInstrct = [NSArray arrayWithObjects:@"One", @"Two", nil]; 

    techTips = [NSArray arrayWithObjects:@"Three", @"Four", nil];  
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
} 

- (NSInteger)techTableView:(UITableView *)techTableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [techTips count]; 
} 

- (UITableViewCell *)techTableView:(UITableView *)techTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *simpleTechTableIdentifier = @"TechTipsCell"; 

    UITableViewCell *cell = [techTableView dequeueReusableCellWithIdentifier:simpleTechTableIdentifier]; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTechTableIdentifier]; 
    } 

    cell.textLabel.text = [techTips objectAtIndex:indexPath.row]; 
    return cell; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [maintInstrct count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *simpleTableIdentifier = @"MaintInstrctCell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier]; 
    } 

    cell.textLabel.text = [maintInstrct objectAtIndex:indexPath.row]; 
    return cell; 
} 
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"showMaintKitInstrct"]) { 
     NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
     maintInstrctViewController *destViewController = segue.destinationViewController; 
     destViewController.maintKitName = [maintInstrct objectAtIndex:indexPath.row]; 
    } 

    else if ([segue.identifier isEqualToString:@"showTechTips"]) { 
     NSIndexPath *indexPath = [self.techTableView indexPathForSelectedRow]; 
     showTechTipsViewController *destViewController = segue.destinationViewController; 
     destViewController.techTipName = [techTips objectAtIndex:indexPath.row]; 
    } 
} 
@end 
+1

樣式說明:在Objective-C中,屬性,方法和變量以小寫字母開頭,但類名以大寫字母開頭。 – geraldWilliam

+0

此外,這個問題的標題是混淆。當你說按鈕,這表明與這個問題無關的UIButtons。你正在處理的是UITableViews和UITableViewCells。請修改這個問題的標題。 – geraldWilliam

+0

這是一個糟糕的面向對象設計模式的典型例子。將你的表格視圖遷移到他們自己的類中,這樣你就不會遭受@geraldWilliam在答案中突出顯示的問題。備註:實際使用'UITableViewController's,並將它們作爲子視圖添加到主視圖中。 – jakenberg

回答

2

我看到這裏發生了什麼。您正在將此視圖控制器分配爲它擁有的UITableViews的數據源。但是,當您的techTableView調用它的dataSource時,它無法知道您希望它調用您的自定義dataSource方法。你需要給你的techTableView自己的自己dataSource。一個單獨的類,符合UITableViewDataSource協議並實現必要的方法。