GCD UITableView asynchrone Ladebilder, falsche Zellen werden geladen, bis ein neuer Bilddownload erfolgt

8

Ich habe eine UITableView mit benutzerdefinierten Zellen. Ich lade Bilder mit Grand Central Dispatch asynchron. Alles funktioniert gut, aber wenn ich nach unten scrolle, werden zuvor geladene Bilder angezeigt, bis das neue Bild heruntergeladen wird. Hier ist mein Code:

%Vor%

Irgendwelche Vorschläge geschätzt. P.S. Ich benutze die Zellen wieder

    
blackhawk4152 21.10.2011, 15:54
quelle

3 Antworten

18

Anstatt die Zelle zu erfassen, müssen Sie den Indexpfad erfassen und dann die Zelle mithilfe von:

zurückholen %Vor%

Auf diese Weise erhalten Sie, wenn die Zelle nicht auf dem Bildschirm angezeigt wird, die Null zurück und das Bild wird nicht auf die falsche Zelle gesetzt.

Die andere Sache, die du nach deinem dispatch_async() hinzufügen musst ist cell.imageView.image=somePlaceholderImage .

ZB:

%Vor%     
hypercrypt 21.10.2011, 16:03
quelle
2

In deinem - (void)tableView:(UITableView *)aTableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { musst du das Bild löschen oder es auf deinen Spinner zurücksetzen. Da Tabellenansichtszeilen wiederverwendet werden, ist dies das Verhalten, das Sie sehen werden.

    
logancautrell 21.10.2011 16:00
quelle
2

Definiert UITableViewCell nicht - (void) prepareForReuse für diesen Zweck? Überschreibe es und lösche dein imageView dort.

    
kra 25.10.2011 07:59
quelle