UITableView reloadData scheint cellForRowAtIndexPath nicht zu veranlassen: aufgerufen zu werden

7

Ich schreibe gerade eine App mit Storyboards, die zwei UITableView s im selben Fenster enthält.

Beim Ausführen der Anwendung wird die erste UITableView mit einer Anzahl von "Registrierungsnummern" gefüllt.

Wenn der Benutzer auf eine Zelle klickt, sollte das zweite UITableView mit Details über die ausgewählte Zelle gefüllt werden.

Beim Tippen auf eine Zahl in der ersten Tabelle habe ich eine Methode, die folgendes antreibt:

%Vor%

Was es tut. Ich habe den Eindruck, dass beim Aufruf des Befehls reloadData dann beide aufrufen sollten:

%Vor%

und

%Vor%

Das erste Feuer, aber das zweite nicht. Ich habe sowohl die Datenquelle als auch den Delegaten mit self verdrahtet.

Ich bin mir nicht sicher, was ich vermisse.

Sollen beide Methoden ausgelöst werden?

    
Fritzables 27.07.2013, 04:04
quelle

8 Antworten

34

Wenn mir so etwas passiert, ist es normalerweise, weil ich -reloadData außerhalb des Hauptthreads anrufe.

    
hatfinch 02.12.2013 21:14
quelle
19

Versuchen Sie nach dem reloadData Folgendes:

%Vor%

Ich habe festgestellt, dass die Tabellenansicht die Notwendigkeit der Aktualisierung zu optimieren scheint, wenn die Datenänderung subtil ist.

    
greg 15.08.2013 04:07
quelle
2

Gezeigte Antworten lösen mein Problem mit der Tabellenansicht nicht. Es rief immer noch

an %Vor%

Allerdings wurde die Zellenzeichnungsmethode nicht ausgelöst:

%Vor%

Mein Problem war, dass (wegen meines Fehlers natürlich) die Tabellenansichtshöhe 0 war. Da die Tabelle nur Zellen anzeigt, die sichtbar sind, versucht sie nie, eine Zelle anzuzeigen. Als ich den Höhenwert änderte, begann die Zeichenzellenmethode erneut zu feuern.

Botom-Linie Überprüfen Sie Ihren Tabellenrahmen und stellen Sie sicher, dass Sie Breiten- und Höhenwerte ungleich null haben!

    
hris.to 19.06.2014 10:55
quelle
1

Ich habe gerade das gleiche Problem gemacht. Ich habe eine performSelectorOnMainThread verwendet, um eine Methode aufzurufen, die dann reloadData aufruft. Dies war notwendig, da ich versuchte, außerhalb des Hauptthreads zu aktualisieren, wie es von Hatfinch vorgeschlagen wurde.

    
CodeFu65816 23.02.2014 23:09
quelle
1

Stellen Sie sicher, dass Sie performSelectorOnMainThread mit waitUntilDone aufrufen: NO, andernfalls haben Sie möglicherweise immer noch das gleiche Problem

    
Sergei Petrov 17.03.2014 18:33
quelle
1

Eine andere Ursache für cellForRowAtIndexPath wurde nicht gefunden.

Wenn numberOfRowsInSection 0 zurückgibt, wird cellForRowAtIndexPath nicht aufgerufen. Dies passierte in meinem Fall, weil ein NSArray während einer Änderung des View-Controllers und seiner Folgezählung (da es null war), die 0 zurückgab, rückgängig gemacht wurde.

    
Dennis Christopher 01.10.2014 17:33
quelle
0

Nachdem ich meinen Kopf tagelang gegen eine Wand geschlagen hatte, löste das mein Problem:

Legen Sie den Haltepunkt Alle Ausnahmen fest und überprüfen Sie, ob in Ihrer Datenquelle eine Ausnahmebedingung auftritt. Ohne den Haltepunkt zu setzen, gibt es keinen Absturz und die Tabellenansicht wird einfach nicht neu geladen.

Volle Antwort hier

    
Max Friedman 20.08.2015 17:21
quelle
0

Ich habe ein ähnliches Problem stundenlang behoben, bevor ich bemerkte, dass mein .reloadData() -Aufruf durch einen Rückruf einer vorherigen Instanz des View-Controllers ausgeführt wurde.

Also hat mein Haltepunkt den .reloadData() Aufruf meiner alten Instanz dieses Ansichtscontrollers getroffen, aber die neue Instanz, die tatsächlich angezeigt wurde, wurde nicht neu geladen, weil sie nicht die Callback-Instanz namens .reloadData() war .

    
Adam Johns 15.06.2016 03:45
quelle

Tags und Links