So che questo è stato chiesto molte volte, ma per favore abbiate pazienza con me dato che ho provato per un giorno a trovare una soluzione.UITableVisualizza le celle disinserite ricaricando le vecchie immagini
Ho un parser rss, una tabella con: testo, dettagli e immagini impostati su AccessoryDisclosureIndicator.view.
Le immagini si caricano perfettamente con semplice GCD asincrono: scorrimento veloce per centinaia di risultati. NESSUN ritardo, NESSUN errore se ho una buona connessione.
Il problema è, per una frazione di secondo - sfarfallio sul carico, perché la cella viene riutilizzata. Anche se la connessione è scadente, a volte lascerà l'immagine sfocata MA il testo/i dettagli sono corretti, solo l'immagine è vecchia ... Quindi lasciatemi ripetere, il testo/dettagli si aggiorna bene e MAI viene ri-accodato in modo errato, solo il l'immagine a volte raramente viene messa in coda in modo errato su connessioni errate/lo scorrimento delle convulsioni avanti e indietro velocemente.
La mia domanda, qualcuno può aiutarmi a memorizzare/codificare il cell.accs.views? Ho provato a impostare i CellID ma ho avuto problemi con la mia implementazione. Il mio codice qui sotto funziona alla grande se la connessione non rallenta mai, basta un leggero sfarfallio per ri-accodare una cella che non mi dispiace.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
[cell.textLabel setNumberOfLines:3];
cell.textLabel.font = [UIFont boldSystemFontOfSize:14.0];
[cell.detailTextLabel setNumberOfLines:3];
cell.detailTextLabel.font = [UIFont systemFontOfSize:12.0];
cell.detailTextLabel.textColor = [UIColor blackColor];
}
RSSItem * rssItem = (RSSItem *)(_rssParser.rssItems)[indexPath.row];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{
//This is what you will load lazily
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:rssItem.imageURL]];
dispatch_sync(dispatch_get_main_queue(), ^{
UIImageView *accImageView = [[UIImageView alloc] initWithImage:[UIImage imageWithData:data ]];
[accImageView setFrame:CGRectMake(0, 0, accImageView.image.size.width, 92)];
cell.accessoryView = accImageView;
//[cell setNeedsLayout];//not needed
});
});
[cell.textLabel setText:rssItem.title];
[cell.detailTextLabel setText:rssItem.summary];
return cell;}
I miei problemi sono apparentemente più profondo di quello, grazie tho – JoshP