Ich habe ein Problem in meiner Anwendung. Jede Hilfe wird sehr geschätzt. Grundsätzlich ist es von Sicht A zu Sicht B, und dann zurück von Ansicht B.Laden Sie Daten aus der Tabellenansicht neu, nachdem Sie aus einer anderen Ansicht zurückgekehrt sind.
In der Ansicht A, hat es dynamische Daten aus der Datenbank geladen und in der Tabellenansicht angezeigt. Auf dieser Seite hat es auch die Bearbeitungsschaltfläche, nicht auf der Navigationsleiste. Wenn der Benutzer die Bearbeitungsschaltfläche öffnet, wird die Ansicht B angezeigt, in der die Auswahlansicht angezeigt wird. Und der Benutzer kann hier Änderungen vornehmen. Sobald dies getan ist, Tabs Benutzer die Schaltfläche zurück auf der Navigationsleiste, speichert die Änderungen in die NSUserDefaults, geht zurück in die Ansicht A durch Pop in der Ansicht B.
Wenn zurück zur Ansicht A, sollte es erhalten die neuen Daten von den UIUserDefaults, und es tat. Ich benutzte NSLog, um auf die Konsole auszudrucken, und es zeigt die korrekten Daten an. Außerdem sollte die ViewWillAppear: -Methode aufgerufen werden, um die neuen Daten für die Tabellenansicht abzurufen, dies jedoch nicht. Es hat sogar die tabellarische Ansicht: numberOfRowsInSection: method nicht aufgerufen. Ich habe eine NSLog-Anweisung in diese Methode eingefügt, aber nicht in der Konsole ausgedruckt.
Als Ergebnis enthält die Ansicht A noch die alten Daten. Die einzige Möglichkeit, die neuen Daten in der Ansicht A zu erhalten, besteht darin, die Anwendung zu stoppen und zu starten.
Sowohl Ansicht A als auch Ansicht B sind die Unterklasse von UIViewController
, mit UITableViewDelegate
und UITableViewDataSource
.
Hier mein Code in der Ansicht A:
- (void)viewWillAppear:(BOOL)animated {
NSLog(@"enter in Schedule2ViewController ...");
// load in data from database, and store into NSArray object
//[self.theTableView reloadData];
[self.theTableView setNeedsDisplay];
//[self.theTableView setNeedsLayout];
}
In hier die "theTableView" ist ein UITableView Variable. Und ich versuche alle drei Fälle von "reloadData", "setNeedsDisplay" und "setNeedsLayout", aber schien nicht zu funktionieren.
In der Ansicht B ist hier die Methode, die der Zurück-Schaltfläche in der Navigationsleiste entspricht.
- (void)viewDidLoad {
UIBarButtonItem *saveButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(savePreference)];
self.navigationItem.leftBarButtonItem = saveButton;
[saveButton release];
}
- (IBAction) savePreference {
NSLog(@"save preference.");
// save data into the NSUSerDefaults
[self.navigationController popViewControllerAnimated:YES];
}
Bin ich in der richtigen Weise? Oder gibt es etwas, das ich vermisst habe?