2010-04-14 8 views
14

Heute ist meine Frage über UITableViewController-s Insbesondere rief ich habe bemerkt, dass die Datenquelle DelegatmethodeUITableView Delegatmethode zweimal

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; 

zweimal genannt wird (auch wenn ich zum Beispiel erstellen Sie einfach eine Navigation-basierte Anwendung und ohne eine Zeile Code hinzuzufügen .. Nun ein NSLog hinzufügen, um es zu verfolgen). Nun, da ich in meiner Anwendung die Anzahl der Abschnitte basierend auf den Dokumenten im Dateisystem bestimmen muss, muss ich einige Methoden dazu aufrufen. Ich habe diese Methoden in die oben erwähnte Methode eingefügt, so dass sie zweimal aufgerufen werden, was ich nicht brauche. Die Fragen sind warum wird es zweimal aufgerufen, kann ich es einmal angerufen haben? Ich hoffe, dass dies in der offiziellen Dokumentation nicht klar angegeben ist (was bedeuten würde, dass ich es überhaupt nicht gelesen habe :)). Übrigens konnte ich sehen, dass andere ähnliche Fragen stellten, aber ich konnte keine befriedigende Antwort finden. Danke.

+1

Haben Sie jemals herausgefunden, warum das so ist?Das passiert mir auch. Genau das gleiche ... – Remover

+0

Ich erlebe dieses Verhalten auch auf ios 4.2 in xcode 4.1. Ich kann nicht scheinen zu identifizieren, wo dieser zusätzliche Anruf kommt, hat jemand eine Lösung schon gefunden? Oder ist das ein Fehler? – Mellson

+0

Ich sehe auch das gleiche Problem (wobei NumberOfSectionsInTableView unter bestimmten Umständen zweimal aufgerufen wird). Dies ist mit iOS 4.2. – kennethmac2000

Antwort

11

Ich hatte das gleiche Problem, nur mit dem Aufruf von numberOfRowsInSection: Die beantwortete lag in der Stack-Trace für jeden Anruf, den ich erhielt.

  1. Der erste Anruf war aufgrund einer Änderung im Tabellenkopf Ansicht war ich in der viewDidLoad machen: meine Viewcontroller.

    thumbView.tableHeaderView = nil; 
    thumbView.tableFooterView = nil; 
    

    Dies führte zu internen Aufruf an _updateContentSize: die heightForTable genannt: die schließlich numberOfRowsInSection genannt:. Dies war etwas, das ich ausgelöst habe, und konnte leicht vermieden werden, indem ich den obigen Code nicht tat :)

  2. Der zweite Aufruf war der legitime, um Daten erneut zu laden. Dies wird durch ein Layout-Ereignis irgendwo ausgelöst und höchstwahrscheinlich können Sie es nicht überspringen.

Ich bin sicher, dass Sie etwas Ähnliches für die numberOfSections beobachten kann: Methode

So ist meine Schlussfolgerung, dass aufgrund der die Umsetzung der UITableView gibt es viele Situationen, in denen bestimmte Delegatmethoden wird zweimal aufgerufen oder mehr, weil die Tabellenansicht etwas aktualisieren muss. Ich versuche, meinen Code um diesen Bug/Feature/etc zu entwerfen.

Hoffen, dass es

hilft
+0

wenn ich setze oder nicht setze -> thumbView.tableHeaderView = nil; thumbView.tableFooterView = null; "numberOfSectionsInTableView" wurde 5 Mal aufgerufen. Warum ? –

2

Wenn Ihr Tableview von einem Kind-View-Controller enthalten ist, diese Viewcontroller bei Ihren Eltern versuchen

[parentViewController addChildViewController:childViewController]; 

vor [parentViewController.view addSubview:childViewController.view]

0

Bitte Code überprüfen, nach TableView Hinzufügen Sie können wieder realodData Methode der Tabelle in mey genannt werden ViewWillAppear Methode

0

Dies kann passieren, wenn der Rahmen der Tabellenansicht versehentlich im Storyboard geändert wird. Wenn Sie auf das Storyboard geklickt haben, wo Sie die Tabellenansicht als Unteransicht hinzugefügt haben, hat Ihre Tabelle möglicherweise nicht den richtigen Rahmen habe am Anfang gesetzt.

Verwandte Themen