UITableView reloadData - cellForRowAtIndexPath wurde nicht ausgelöst

7

Ich habe splitViewController, der als MasterViewController einige viewController und als DetailViewController einige tableViewController hat. Wenn ich eine Taste auf dem MasterViewController drücke, möchte ich den neuen tableViewController im Detail ViewController anstelle eines bestehenden anzeigen.

So habe ich das gefallen:

%Vor%

Danach gebe ich Daten weiter, die in new tableController angezeigt werden:

%Vor%

Danach "pushe" ich neue Controller zu splitViewController:

%Vor%

In der ZieltabelleViewController-Methode "passInSearchResults" werden Daten übergeben und ich rufe auch reloadData auf. Die Methode sieht so aus:

%Vor%

Konsole: Daten werden übergeben: [hier bekomme ich die genauen Daten, die ich will und es scheint genau richtig].

%Vor%

Konsole: Einstellung Tischlänge: [hier bekomme ich richtige Länge]

Das Problem ist, dass die Tabelle nicht mit übergebenen Daten gefüllt ist und die Methode "cellForRowAtIndexPath" nicht aufgerufen wird.

Wie kann es sein, dass bei reloadData Methode "numberOfRowsInSection" ausgelöst wird, aber nicht die Methode "cellForRowAtIndexPath" ... ???

Danke

    
Borut Tomazin 12.08.2010, 18:41
quelle

7 Antworten

4
  

Wie kann es sein, dass bei reloadData Methode "numberOfRowsInSection" ausgelöst wird, aber nicht die Methode "cellForRowAtIndexPath" ... ???

Nachdem wir einen Tag mit demselben (ish) Problem verbracht haben, haben wir hier einen Fehler gefunden. Ich habe jedoch einen Hack / Workaround gefunden.

Wenn ich das Array (Hinzufügen / Entfernen von Werten oder vollständiges Neuaufbau) ändere, das in meiner cellForRowAtIndexPath-Methode verwendet wird, scheint es CellForRowAtIndexPath erneut korrekt aufzurufen, wenn Sie Data erneut laden.

Zum Beispiel habe ich in meinem cellForRowAtIndexPath etwas wie:

%Vor%

Ich habe auch eine Methode, um dieses Array zu erstellen, das bei viewDidLoad aufgerufen wird:

%Vor%

Ich habe also festgestellt, dass, wenn ich diese Methode vor dem Aufruf von reloadData erneut in meinem searchResultsArrayWithSections-Array aufruft, alle Methoden von UITableViewDelegate korrekt aufgerufen werden! (Wie ich schon sagte, hack aber es funktioniert!)

%Vor%     
Buchannon 21.04.2011, 00:01
quelle
10

Überprüfen Sie, ob Sie beim Aufruf von [self.tableView reloadData];

im Hauptthread sind %Vor%

}

    
andrey 09.07.2012 15:50
quelle
4

Überprüfen Sie Ihre numberOfRows, wenn es 0 ist, gibt es keine Zellen zum Anzeigen.

    
jimmyb 11.11.2012 01:47
quelle
2

In meinem Fall war das Problem, dass die Funktion reloadData () nicht vom Hauptthread aufgerufen wurde.

Ich habe dies geändert, indem ich es in eine Funktion dispatch_async () gestellt habe, die das Problem gelöst hat:

%Vor%

Hoffe, das hilft anderen.

    
NDB 11.03.2016 04:08
quelle
1

Ich hatte das gleiche Problem, aber die Entscheidung war sehr einfach. Könnten Sie zuerst versuchen, die Tabelle nach unten zu scrollen? tableView: cellForRow ... sollte aufgerufen werden. Überprüfen Sie die Höhe der Kopfzeilen und contentOffset für tableView.

    
Nikita Ivaniushchenko 20.12.2011 14:05
quelle
0

Sie können auch die Tabelle in der Methode init [With ...] von viewController zuweisen und auch dieselbe Eigenschaft in IB verdrahten. Auf diese Weise ist es möglich, dass numberOf ... delegate-Methoden aufgerufen werden und cellForRow ... nicht.

    
Timur Kuchkarov 19.02.2013 04:25
quelle
0

Mein " AutoLayouted " UITableView hat cellForRowAtIndexPath nicht bei reloadData aufgerufen, weil ich den Frame versehentlich gesetzt habe.

%Vor%

Durch die Änderung in CGRectZero funktionierte es ..

%Vor%     
Max Ballo 30.03.2015 20:53
quelle

Tags und Links