2012-04-02 20 views
0

Ich habe Probleme mit dem, was ich mir vorstellen kann, ist ein sehr einfaches Problem. Ich bin Laden einer UITableViewController Klasse namens LocationViewController von einem UIViewController:Loading UITableViewController von Code

LocationViewController *lvc = [[LocationViewController alloc] init]; 
[self.navigationController pushViewController:lvc animated:true]; 

In dieser Klasse habe ich die 3 folgenden Verfahren umgesetzt:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return 3; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"CityCell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    cell.textLabel.text = @"Test"; 
    return cell; 
} 

Und ich erhalte den folgenden Fehler:

UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:' 

Ich hatte diesen Fehler zuvor beim Übergang zwischen ViewControllern mit dem StoryBoard, weil der CellIdentifier nicht c war orrect. Ich habe keine Ahnung, was ich falsch mache. Ich habe versucht, eine Nib-Datei mit diesem ViewController zu laden, aber das wirft den gleichen Fehler.

+0

Nur um sicher zu sein ... Sie haben das überprüft ** ** diese cellForRowAtIndexPath: tatsächlich ist aufgerufen (und vielleicht den Wert von "Zelle" vor der Rückkehr protokolliert)? –

Antwort

3

Sie müssen die Zelle zuordnen. benutze diesen Code.

static NSString *CellIdentifier = @"Cell"; 

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

Vielen Dank, dass Sie sich die Zeit genommen haben zu antworten, es hat perfekt funktioniert. – SamRowley

0

Verwendung dieser Code

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
static NSString *CellIdentifier = @"Cell"; 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 
} 
cell.textLabel.text = @"Test"; 
return cell;} 
0

dequeueReusableCellWithIdentifier ohne Angaben, wenn kein Objekt in der wieder verwendbaren Zellenwarteschlange ist. Überprüfen Sie, ob nach dem Aufruf von dequeueReusableCellWithIdentifier die Zelle null ist, und erstellen Sie in diesem Fall ein neues UITableViewCell.

0

dequeueReusableCellWithIdentifier ist ein Cache von bereits erstellten UITableViewCells mit Kennung „Citycell“

Wenn Sie den Code unten verwenden, er versucht, eine Zelle aus dem Cache zu bekommen, und wenn es nicht kann, wird es erstellen und Speichern Sie es dann im Zellencache für die spätere Verwendung.

Sie benötigen den Cache für große Tabellen, da dadurch die Tabellenleistung beim Scrollen drastisch verbessert wird.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *MyIdentifier = @"CityCell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease]; 
    } 
    cell.textLabel.text = @"Test"; 

    return cell; 
} 

Werfen Sie einen Blick auf den Führungstisch View-Programmierung mehr darüber zu erfahren:

Table Programming Guide

Verwandte Themen