Frage

Ich habe eine Tabelle basierte Anwendung, dass speichert Daten auf einem MySQL-Server, wird es aktualisiert und schreibt die Daten in NSDictionary für persistance. Wenn Sie auf die Daten eine Änderung vornehmen, um die Tabelle aktualisieren müssen. Aber wenn ich eine put [Selbsttableview reload] die App stürzt ab, wenn eine Zeile auswählen. Hat jemand eine Idee hat, wie der Tisch zu machen Refresh passieren. Muß ich das Graben und ein Objekt aus den Daten zu machen und verwenden?

Danke.

  -(void) loadData3;{

    MyAppDelegate *AppDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
self.tableDataSource3 = [AppDelegate.data3 objectForKey:@"Rows"];
NSLog(@"AppDelegate.data3 : %@",AppDelegate.data3 );
NSLog(@"self.tableDataSource3 : %@",self.tableDataSource3 );

}

- (void)viewDidLoad {
    [super viewDidLoad]; 
    [self loadData3];
    if(CurrentLevel3 == 0) {
    self.navigationItem.title = @"Family";
}
else 
    self.navigationItem.title = CurrentTitle3;  
}
}


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

 }

Hier ist die cellForRowAtIndexPath Methode.

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

    static NSString *CellIdentifier = @"Cell";

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

    // Set up the cell...
    NSDictionary *dictionary = [self.tableDataSource3 objectAtIndex:indexPath.row];
    cell.textLabel.text = [dictionary objectForKey:@"Title"];

    return cell;
}
War es hilfreich?

Lösung

schließe ich mich mit der Erklärung, dass reload der richtige Weg zu gehen, und Sie müssen die Fehler finden und zu beheben, die den Absturz verursacht.

Hier sind zwei riesige Dinge zu sehen:

  1. Vergewissern Sie sich unmittelbar nach der Datenbank zu ändern, kehrt der Aufruf numberOfRowsInSection den gültigen, neuen Wert als Ergebnis der Tabelle geändert werden. (Ich habe aufgrund dieser vielen Menschen Postausgaben gesehen).

  2. Sehen vorsichtig in Ihrer cellForRowAtIndexPath Methode. Denken Sie daran, diese Methode setzt nicht nur die Daten in den Zellen, sondern ist auch verantwortlich für Recycling Zellen. Ich habe viele Fälle gesehen, wo diese falsch behandelt wurden - und wenn Tabellendaten anschließend neu geladen werden - und die Zellen müssen zurückgewonnen werden und neu zugeordnet - Dinge drunter und drüber gehen. Ich würde 99% darauf wetten, dass Ihr Problem hier ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top