2010-06-28 17 views
12

Also aktualisiere ich eine Tabellenansicht durch Einfügen/Löschen/Neuladen von Zeilen nach Bedarf, aber da ich nicht 100% ig sicher bin, dass die Tabellenansicht immer korrekt aktualisiert wird, gibt es eine Möglichkeit, aus einem fehlerhaften Batch von Updates sicher zu versagen ?UITableView: Wiederherstellung nach NSInternalInconsistencyException nach fehlerhaften Aktualisierungen?

Gerade jetzt, ich habe dies:

// Try to animate the updates. If something goes wrong, just reloadData. 
    @try { 
     [tableView beginUpdates]; 
     [tableView deleteRowsAtIndexPaths:deleteArray withRowAnimation:UITableViewRowAnimationMiddle]; 
     [tableView reloadRowsAtIndexPaths:reloadArray withRowAnimation:UITableViewRowAnimationNone]; 
     [tableView insertRowsAtIndexPaths:insertArray withRowAnimation:UITableViewRowAnimationMiddle]; 
     [tableView endUpdates]; 
    } 
    @catch (NSException * e) { 
     if([[e name] isEqualToString:NSInternalInconsistencyException]){  
      [tableView reloadData]; 
      NSLog(@"animation failed, just reloading data"); 
     } 
     else { 
      @throw e; 
     } 
    } 

Sobald jedoch diese Ausnahme trifft, scheint reload nicht zu arbeiten. Gibt es eine andere Möglichkeit, das UITableView im Grunde in einen funktionierenden Zustand zurückzusetzen?

Antwort

3

Idealerweise sollten Sie die Tabelle mit einem Array sichern, das garantiert das tut, was die Tabelle erwartet. UIKit erwartet, dass Ausnahmen fatal sein können (dies gilt für Apples Philosophie, dass Ausnahmen Programmiererfehler anzeigen.)

+2

Ja, das wäre extrem ideal. Ich will nicht schnippisch klingen, aber im Idealfall würde alles gut gehen und nichts würde schief gehen. Leider passiert das selten. Und im Produktionscode würde ich viel lieber versagen, anstatt die App im Gesicht des Benutzers zu stürzen. –

+3

@David gut, wenn Sie absolut auf Wiederherstellung eingestellt sind. Ich würde die Ausnahme abfangen und dann die Tabellenansicht neu erstellen. Wisse, dass dies mit ziemlicher Sicherheit ein wenig Speicher verliert und andere Dinge in unerwünschten Zuständen zurücklässt. – cobbal

Verwandte Themen