Meine App hat zwei Status: angemeldet und nicht angemeldet, und ich habe die folgende Architektur (stark vereinfacht):
- ViewController A, der ein Suchfeld und eine Tabellenansicht enthält.
- ViewController B, der zum Anmelden in der App verwendet wird.
Der Ablauf ist wie folgt:
- Der Benutzer ist nicht angemeldet.
- A wird auf den Stapel geschoben. In viewWillAppearIch überprüfe, ob der Benutzer angemeldet ist und wenn ja, wird eine asynchrone Netzwerkanforderung gestellt, und sobald dies erledigt ist, wird die Tabelle mit den Daten aus dem Netzwerk geladen. Da der Benutzer zu diesem Zeitpunkt jedoch nicht angemeldet ist, ist die Tabellenansicht leer.
- Der Benutzer tippt auf das Suchfeld. weil er nicht eingeloggt ist, wird B gedrückt (nach einer Bestätigung);
- er meldet sich erfolgreich in B an, drückt dann eine Taste, die B öffnet und A wieder anzeigt;
- zu diesem Zeitpunkt, weil er angemeldet ist, viewWillAppearmache ich die asynchrone Anfrage;
- Wenn das erledigt ist, rufe ich reloadDatadie Tabellenansicht auf.
Was mir auffällt ist, dass numberOfRowsInSection:es aufgerufen wird und das richtige Ergebnis zurückgibt, danach jedoch cellForRowAtIndexPath:NICHT aufgerufen wird und die Tabelle leer bleibt.
Ich habe geprüft und reloadDatawird im Haupt-Thread aufgerufen.
Irgendeine Idee was kann es sein? Weil es mich verrückt macht!
Danke,
S.
EDIT: Hier ist das asynchrone Codebit aus viewWillAppearA.
if ([User isLoggedIn]) {
[self.asyncRequest fetchDataWithCompletionHandler:^(id response, NSError *error) {
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
if (error) {
[Utils displayError:error];
} else {
self.array = response;
self.isLoaded = YES;
[self.tableView reloadData];
[self.tableView setContentOffset:CGPointMake(0.0f, 0.0f) animated:NO];
}
}];
}
Ich habe überprüft, ob die asynchrone Anforderung erfolgreich abgeschlossen wurde und responsedie richtigen Daten enthält (dies ist das Array , das zum Sichern der Anforderung verwendet wird UITableView).
Danach reloadDatahabe ich einen Haltepunkt eingefügt tableView:numberOfRowsInSection:und dieser stoppt dort und gibt die richtige Anzahl von Elementen zurück array. Danach wird der Haltepunkt in tableView:cellForRowAtIndexPath:jedoch nie mehr erreicht.

tableView:cellForRowAtIndexPath:nichtcellForRowAtIndexPath:.