2012-03-24 7 views
1

ich in meinem iOS Tabbed Anwendung eine Tabellenansicht haben, aber ich kann die App nicht ausgeführt, bekomme ich diesen Fehler zur Laufzeit:Versuch Tabellenansicht in ios zu verwenden, Fehler immer

3/23/12 10:15:23.119 PM CodeCompanion: *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UITableViewController loadView] loaded the "2-view-16" nib but didn't get a UITableView.' 
*** First throw call stack: 
(0x13bd052 0x154ed0a 0x1365a78 0x13659e9 0x2436ae 0xda5cb 0xf5b89 0xf59bd 0xf3f8a 0xf3e2f 0xf1ffb 0xf285a 0xdbfbf 0xdc21b 0xdd0f1 0x4bfec 0x51572 0x4b72b 0x3abc2 0x3ace2 0x3aea8 0x41d9a 0x12be6 0x138a6 0x22743 0x231f8 0x16aa9 0x12a7fa9 0x13911c5 0x12f6022 0x12f490a 0x12f3db4 0x12f3ccb 0x132a7 0x14a9b 0x2888 0x27e5) 

My-View-Controller Header-Datei unter:

#import <UIKit/UIKit.h> 

@class LanguageTableViewCell; 

@interface LanguagesViewController : UITableViewController { 

    NSArray *languages; 

} 

@property (nonatomic, retain) NSArray *languages; 

@end 

und meine Implementierungsdatei ist:

#import "LanguagesViewController.h" 
#import "LanguageTableViewCell.h" 

@implementation LanguagesViewController 

@synthesize languages; 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSLog(@"getting cell for row at index path: %i", [indexPath row]); 
    LanguageTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"languageBase"]; 
    if (cell == nil) { 
     cell = [[LanguageTableViewCell alloc] 
       initWithStyle:UITableViewCellStyleDefault 
       reuseIdentifier:@"languageBase"]; 
    } 
    [cell setName:[languages objectAtIndex:[indexPath row]]]; 
    return cell; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    NSLog(@"rows in section: %i is: %i", section, [languages count]); 
    return [languages count]; 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    // Return the number of sections. 
    NSLog(@"getting number of sections (1)"); 
    return 1; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Release any cached data, images, etc that aren't in use. 
} 

#pragma mark - View lifecycle 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    NSLog(@"view loaded, setting array"); 
    languages = [NSArray arrayWithObjects:@"Java", nil]; 
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
} 

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
} 

- (void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 
} 

- (void)viewDidDisappear:(BOOL)animated 
{ 
    [super viewDidDisappear:animated]; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Return YES for supported orientations 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
     return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
    } else { 
     return YES; 
    } 
} 

@end 

ich ziemlich neu bin zu Xcode und objektiv- c, also erwähne alles, was schief gehen könnte. Ich habe den ViewController der Tabellenansicht auf meine obige Klasse gesetzt und bekomme keine Fehler oder Warnungen in xcode. Die Tabellenansicht ist eine jener dynamischen, die Prototypzellen verwenden. Wenn ich die Klasse der Zelle veröffentlichen muss, werde ich.

+1

Ändern Sie die Oberklasse von UITableViewController zu UIViewController. – CodaFi

Antwort

0

Nach dem Aussehen Ihrer Fehlermeldung verwenden Sie eine Nib-Datei, "2-view-16", um Ihre Ansicht zu planen, aber es enthält kein UITableView (oder es ist nicht angeschlossen).

Der LanguagesViewController erbt von UITableViewController, der nach einem UITableView zum Steuern sucht, das nicht existiert.

Wenn Sie zum Einrichten der Ansicht eine Nib verwenden, müssen Sie der Nib ein UITableView hinzufügen und es als tableView Ihres LanguagesViewControllers festlegen.

+0

Ich verwende Storyboards. Sorry für meine Ignoranz, aber das ist anders, oder? – Greg

+0

Ah, tut mir leid, ich bin mit Storyboards nicht vertraut, also kann ich nicht helfen. – sampage

+2

@sampage: TableView ist keine exponierte Steckdose von UITableViewController (dumm genug), er muss seine eigenen erstellen, und dann nicht nur als TableView, sondern als die Ansicht. – CodaFi

Verwandte Themen