cellForRowAtIndexPath wird zu früh aufgerufen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • cellForRowAtIndexPath wird zu früh aufgerufen

    Moin, liebe Leute!

    Ich habe gerade ein Problem mit einer iPad App.
    Und zwar habe ich eine UITableView.

    Um das Teil umzusetzen, habe ich eine subclass erstellt uund die erforderlichen Methoden implementiert.
    (Die Daten pulle ich mir aus einer XML Datei, die per PHP aus einer DB erstellt wird)

    Jetzt öffnet ein Klick auf eine Reihe in der Tabelle ein UIPopover.
    Und in dieses Popover lade ich ein NIB, indem eine weitere UITableView enthalten ist.

    Jetzt habe ich den viewController des Popups ebenfalls als subclass von UITableViewDalagate und UITableViewDataSource deklariert und die UITableView in IB verbunden.
    (Auch diese Daten werden von einer [anderen] PHP-XML-Quelle gefüllt)

    In der ersten Tabelle (mainView) klappt alles perfekt.
    Die Daten werden eingetragen und sehen auch recht gut aus.

    Im Popover habe ich allerdings das Problem, dass nichts angezeigt wird.
    Um den Grund zu ermitteln, habe ich fast überall NSLog()'s eingebaut.

    Dadurch ist mir folgendes aufgefallen:
    Die Daten werden richtig eingelesen und auch in das entsprechende Array eingetragen.
    Doch das eigentliche Problem ist, dass die Methode

    Quellcode

    1. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    zu früh aufgerufen wird.

    Ich habe den Syntax aus meiner mainView herauskopiert, also sollte ich nichts vergessen haben.
    Zuerst wird besagte Methode aufgerufen (sendet 0, da das Array noch leer ist), dann wird die URL aufgerufen und ein NSXmlParser gestartet und dann kommen die Ergebnisse ins Array.

    Und das witzigste: die Methode wird sogar aufgerufen, bevor

    Quellcode

    1. - (void)viewDidAppear:(BOOL)animated
    kommt…


    Kann mir da vllt. jemand von euch zur Hand gehen?
    Wäre super klasse!

    Vielen Dank & liebe iGrüße
    Julian
  • Ich gehe mal davon aus, dass Du die Daten asynchron von der URL lädst. Dann solltest Du nach erfolgreichem Laden der Daten ein reloadData an den TableView senden.

    Es mag ja sein, dass die Daten bei dem ersten ViewController schnell genug geladen werden, bevor der TableView seine Daten anfordert, allerdings solltest Du Dich darauf nicht verlassen und auch dort ein reloadData an den TableView senden, wenn die Daten geladen wurden.
  • Hallo MCDan!

    Danke für den Tip, hilft aber leider nicht weiter.
    Die numberOfRowsInSection wird einfach zu früh aufgerufen.

    Vielleicht schmeiße ich alles noch mal über den Haufen und fange neu an…
    Ich habe so langsam das Gefühl, dass ich das alles nicht so richtig aufgebaut hab :(
  • zu früh gibt es nicht.

    Das System ruft diese nunmal irgendwann auf wenn der View erstellt wird. Darauf hast Du keinen Einfluß und solltest du auch nicht haben. Stell dir vor du klickst auf einen Button und es sollte ein Tableview aufgehen, dass geht aber nicht auf weil Du noch nicht mit dem Laden Deiner Daten fertig bist.

    Deshalb erfolgt das immer asynchron und das ist auch gut so.

    Wenn ein ReloadData nach dem Laden Deiner Daten nicht zum gewünschten Ergebnis führt, dann liegt das wahrscheinlich daran, dass Du das TableView Delegate oder TableView DataSource nicht richtig implementiert hast. Dabei ist es aber sehr schwer Dir hier zu helfen weil das 1 Millionen Möglichkeiten gibt wo der Fehler liegt.

    Du solltest Dir unbedingt mal die Programming Guide dazu durchlesen

    developer.apple.com/library/io…boutTableViewsiPhone.html

    Erst wenn Du das verstanden hast, können wir Dir hier gezielt helfen

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)