aktualisieren TableView nach dem löschen des data-source-Objekt

Das Problem ist, wenn ich versuche zu löschen, alle Einträge in meinem data-source-Objekt und so deaktivieren Sie alle Zeilen, die in meinem tableview, ich bin erfolgreich mit dem ersten Teil, wird der Zähler der Zeilen anzeigen (tableView:numberOfRowsInSection:- Methode) zurück 0, aber die Zellen noch enthalten veraltete Daten.

(Wenig Ruf hier zu posten Bilder, also ich habe es runtergeladen, auf ftp: Geschichte.png)

Hier ist ein Beispiel von, was ich versuche zu tun. Das Papierkorb-Symbol löscht die Datenbank, setzt den Zeilen-Zählung auf null, aber diese Zellen bleiben in der Tabelle, die Abstürze beim scrollen es.

Data-source-Objekt speichert als eine Eigenschaft im AppDelegate, so ViewController bekommt die Daten von dort.

Hier einige code:

HistoryViewController.h

@interface HistoryViewController : UITableViewController <UITableViewDataSource> {
    IBOutlet UITableView *historyTable;
    SynonymsAppDelegate *appDelegate;
}

@property (retain) UITableView *historyTable;

- (IBAction)clearHistory:(id) sender;

@end

HistoryViewController.m

@implementation HistoryViewController

@synthesize historyTable;

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    appDelegate = (SynonymsAppDelegate *)[[UIApplication sharedApplication] delegate];
    [appDelegate initHistoryList];
}

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    HistoryModel *historyEntry = [appDelegate.historyList objectAtIndex:indexPath.row];
    cell.textLabel.text = historyEntry.word;
    return cell;
}

- (IBAction)clearHistory:(id)sender {
    [HistoryDataController clearHistory]; //removes entries from DB
    [appDelegate initHistoryList]; //refreshes data source object
    [self.tableView reloadData]; //doesn't help
}

AppDelegate hat (NSMutableArray) *historyList Eigenschaft und diese Funktion:

- (void)initHistoryList {
    HistoryDataController *historyDataController = [[HistoryDataController alloc] initWithHistoryData];
    historyList = [historyDataController.historyEntries retain];
    [historyDataController release];
}

Ich glaube das problem ist, dass TableView irgendwie speichert die Werte der Zellen, aber warum tun Sie das display, wenn tableView:numberOfRowsInSection: zurück 0? Und wie zu reinigen, dass die cache -?

Danke für die Hilfe.

  • Haben Sie versucht, setzen von Breakpoints und sehen, wenn die numberofrows in diesem Abschnitt ist eigentlich aufgerufen?
  • ja, nicht durch das setzen eines Breakpoints, obwohl, ich habe die Protokollierung der Anrufe mit NSLog(); Beim Antippen der trashbin-Taste, 1.Datenbank löscht, 2.sowie AppDelegate historyList Eigentum, 3.rowsInSection 0 zurück, und dann passiert nichts (Zellen bleiben, wo Sie sind)
InformationsquelleAutor nikans | 2010-11-21
Schreibe einen Kommentar