Domanda

Ho una sottoclasse UITableView e una sottoclasse UITableViewCell che sto usando per le celle. Sto caricando in anticipo tutte le mie celle e le conservo in un array da dove le uso in cellForRowAtIndexPath. A parte questo, ho un thread che carica alcune immagini in ogni cella, sullo sfondo. Il problema è che le celle non vengono aggiornate alla velocità di caricamento delle immagini. Ad esempio, se non scorro la vista della mia tabella, le prime celle vengono aggiornate solo quando tutte le celle sono state modificate e il thread è uscito.

Qualche idea su come posso effettivamente aggiornare la mia tabella / cella?

È stato utile?

Soluzione

Hai provato a chiamare [cell setNeedsDisplay] ma sul thread principale?

setNeedsDisplay quando chiamato su un thread in background non fa praticamente nulla,

prova questo:

[cell performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:NO];

Altri suggerimenti

Stai utilizzando un callback per informare il controller della visualizzazione della tabella che le immagini sono state caricate? In caso contrario, sarebbe un metodo ideale.

Quando l'immagine viene caricata, attiva una richiamata sul controller della vista tabella che imposta l'immagine sulla cella, quindi chiama reloadData su tableView. In questo modo ogni volta che viene caricata una nuova immagine, la tabella verrà aggiornata per visualizzarla.

Non sai esattamente cosa stai cercando di ottenere con le immagini, ma posso immaginare che provengano da un server ed è per questo che vuoi scaricarle in un altro thread?

Non tenterei di caricare le celle prima di visualizzare la tabella: dovresti utilizzare il caricamento lazy il più possibile per assicurarti di sfruttare al massimo la memoria su un dispositivo.

Il mio suggerimento sarebbe di guardare usando una sottoclasse di NSOperation per gestire il caricamento delle immagini. Innanzitutto NSOperation gestirà per te tutta la complessità del threading e ti consentirà di mettere in coda le operazioni. Sarai quindi in grado di dare la priorità alle operazioni che vuoi completare per le celle in alto.

Al termine di ogni operazione è possibile richiamare la cella o tableViewController (forse creare un protocollo delegato per rendere tutto molto semplice).

Se hai un'operazione per combinazione immagine / cella, dovresti essere in grado di aggiornare ogni cella al completamento dell'operazione. Fare questo insieme a stabilire le priorità delle operazioni ti darà una soluzione ottimale.

Se le NSOperations sembrano complesse o se ne rimani scoraggiato, per favore, provalo, è molto più semplice di quanto avrei potuto far sembrare.

Hai provato a chiamare [cell setNeedsDisplay] ?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top