1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Unsere jährliche Weihnachts-Banner-Aktion hat begonnen! Wir freuen uns auf viele, viele kreative Vorschläge.
    Mehr dazu könnt Ihr hier nachlesen: Weihnachtsbanner 2016

    Information ausblenden

TableView: Erstes und Letztes Object verändern sich

Dieses Thema im Forum "iOS-Developer" wurde erstellt von GreenApple, 22.11.09.

  1. GreenApple

    GreenApple Reinette de Champagne

    Dabei seit:
    20.05.07
    Beiträge:
    412
    Hallo,
    ich habe in meiner iPhone App ein TableView, der durch einen NSMutableArray gefüllt wird. Wenn ich jetzt, aber mehr als acht Objekte habe, verändern sich das erste und letzte, also irgendwie liegen die TextLabel übereinander. Ich habe mich durch etliche Seiten durchgewühlt und nur etwas von einer Möglichkeit mir removeObject gelesen, aber habe keine Ahnung wie ich sie einsetzen muss.
    Bin für jede Hilfe echt dankbar!
     
  2. philo

    philo Roter Stettiner

    Dabei seit:
    13.10.04
    Beiträge:
    973
    Code ist in solchen Fällen immer gut!
     
  3. GreenApple

    GreenApple Reinette de Champagne

    Dabei seit:
    20.05.07
    Beiträge:
    412
    Ja nur welchen, das Projekt ist nämlich eigentlich, schon fertig und ich bin jetzt nur noch am Füllen, und ich würde auch ungern mein ganzes Projekt preisgeben.

    Edit, ich probier es mal hier mit:
    Und die Klasse sieht so aus:
     
  4. philo

    philo Roter Stettiner

    Dabei seit:
    13.10.04
    Beiträge:
    973
    na den teil, wo der TableView gefüllt wird und deren Eigenschaften (über die Methoden) definiert werden.
     
  5. GreenApple

    GreenApple Reinette de Champagne

    Dabei seit:
    20.05.07
    Beiträge:
    412
    Meinst du diese Methode: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath?
     
  6. philo

    philo Roter Stettiner

    Dabei seit:
    13.10.04
    Beiträge:
    973
    zB oder die:

    Code:
    UITableViewDelegate Methods
     
  7. GreenApple

    GreenApple Reinette de Champagne

    Dabei seit:
    20.05.07
    Beiträge:
    412
    Diese Teil, oder?


     
  8. philo

    philo Roter Stettiner

    Dabei seit:
    13.10.04
    Beiträge:
    973
    ändere male folgende Zeile:
    Code:
    Rezept *r = (Rezept *)[appDelegate.rezepte objectAtIndex:indexPath.row];
    
    in
    Code:
    Rezept *r = (Rezept *)[appDelegate.rezepte objectAtIndex:[indexPath indexAtPosition:1]];
    
    sag mal ob es gklappt hat, ich muss jetzt ins bett.Danke
     
  9. philo

    philo Roter Stettiner

    Dabei seit:
    13.10.04
    Beiträge:
    973
    Screenshot wäre auch nicht schlecht. Mein Beitrag davor war glaube ich nicht wirklich hilfreich. Ich habe noch nie Zellen, so wie du gestyled, glaube aber, dass da was mit den Frames schief geht.
     
  10. philo

    philo Roter Stettiner

    Dabei seit:
    13.10.04
    Beiträge:
    973
    Nur mal so nebenbei: Habe mal deine Code benutzt und Cells erstellt. Das Detail Label sitzt bei mir unschön auf der Linie und das Gelb ist auch nicht besonders schön...

    EDIT: ansonsten geht es aber. keine Probleme mit mehr als 8 Cells. Schalte mal die Bilder aus und gucke, ob es vielleicht an denen liegt. Ich habe sonst kein Idee.

    EDIT 2: jetzt sehe ich das Problem auch...sehr komisch. muss wohl nen Bug sein. Wo hast du denn was mit removeObject gelesen?
     
    #10 philo, 23.11.09
    Zuletzt bearbeitet: 23.11.09
  11. philo

    philo Roter Stettiner

    Dabei seit:
    13.10.04
    Beiträge:
    973
    Das ist zwar unsauber, aber wenn du jedes mal eine neue Cell erszeugst, dann treten zumindest bei mir die Probleme nicht mehr auf. Code siehe unten..hättest du aber wohl auch selbst hinbekommen ;)

    Code:
        UITableViewCell *cell; //= [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        //if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    		cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        //}
     
  12. GreenApple

    GreenApple Reinette de Champagne

    Dabei seit:
    20.05.07
    Beiträge:
    412
    Hey,
    ok danke für den Tipp ich werde ihn nachher mal ausprobieren. Bei dir liegt das DetailLabel wahrscheinlich auf der Linie, weil ich noch die rowHeight geändert habe auf 60.0.
     
  13. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.469
    Das liegt daran, dass Du immer ein neues mainLabel und detailLabel der Zelle hinzufügst, egal ob die Zelle wieder verwendet wird oder nicht. Dadurch stapeln sich dann natürlich die Labels bei wieder verwendeten Zellen. Für Deinen Anwendungsfall gibt es im Table View Programming Guide for iPhone OS ein Beispiel, wie man das richtig macht.

    Übrigens erzeugst Du mit Deinen mainLabel und detailLabel Speicherlecks, weil Du sie nicht released.

    MacApple
     
  14. philo

    philo Roter Stettiner

    Dabei seit:
    13.10.04
    Beiträge:
    973
    MacApple hat Recht!

    Du solltest das Main und Detaillabel nur ein Mal erzeugen:

    Code:
    if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    ..
    UILabel *mainLabel = [[UILabel alloc] .....
    ...
    mainLabel.tag = 1;
    [cell addSubview:mainLabel];
    }
    
    UILabel* mainLabel = (UILabel*)[cell viewWithTag:1];
    mainLabel.text = ....
    ...
    
    ..
    
    gerade selbt getestet und es geht!
    Gruss
     
  15. GreenApple

    GreenApple Reinette de Champagne

    Dabei seit:
    20.05.07
    Beiträge:
    412
    OK danke, die einzelnen Zellen überschrieben sich jetzt zwar nicht mehr, aber ab der 9. Reihe wiederholen sich die Objekte, also anstatt dem 9. wird das 1. gezeigt, aber wenn ich darauf klicke komme ich zum richtigen View.

    Aber schon Mal vielen Danke :)
     
  16. Poljpocket

    Poljpocket Salvatico di Campascio

    Dabei seit:
    07.01.07
    Beiträge:
    432
    Dann hast du bestimmt einen Logikfehler in der Delegate...
     
  17. GreenApple

    GreenApple Reinette de Champagne

    Dabei seit:
    20.05.07
    Beiträge:
    412
    Hab ich schon durchsucht, finde aber nix.
     
  18. philo

    philo Roter Stettiner

    Dabei seit:
    13.10.04
    Beiträge:
    973
    dann nochmal code posten!
     
  19. GreenApple

    GreenApple Reinette de Champagne

    Dabei seit:
    20.05.07
    Beiträge:
    412
    -
    So sieht's jetzt bei mir im Moment aus.
     
  20. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.469
    Du hast das von mir oben verlinkte Dokument nicht gelesen, oder? Du setzt jetzt nur den Inhalt der Zelle, wenn eine neue Zelle erzeugt wird. Bei einer wieder verwendeten Zelle gibst Du sie unverändert zurück. Logisch, dass sich dann alles wiederholt. Die Speicherlecks produzierst Du auch immer noch.

    MacApple
     

Diese Seite empfehlen