Domanda

Ho un grande insieme di dati (circa 3500 oggetti) che restituisce da un server remoto via HTTP. Attualmente i dati vengono presentati in un NSCollectionView. Un aspetto dei dati è un pacchetto di percorso per il server per una piccola immagine che rappresenta i dati (si pensi miniature per semplicità).

Associazioni funziona fantasticamente per i dati che è già tornato, e vincolante l'immagine tramite un valueurl vincolante è facile da fare. Tuttavia, l'interfaccia utente è molto lenta quando si scorre l'insieme di dati -. Che mi fa pensare che la NSCollectionView sta recuperando tutti i dati di immagine invece che solo i dati di immagine utilizzati per visualizzare le immagini attualmente visibili

Ho avuto l'impressione che i controlli di cacao erano abbastanza intelligenti per recuperare solo i dati per le informazioni che sono effettivamente in uscita per l'interfaccia utente tramite caricamento pigro. Questo certamente sembra essere il caso con NSTableView -. Ma potrebbe essere sviato su questo pensiero

Dovrebbe valueurl atto vincolante pigramente e, inoltre, deve agire pigramente in un NSCollectionView?

ho potuto creare un meccanismo di caching (in effetti ho già una cosa del genere sul posto per un'altra applicazione - vedi il mio post qui, se siete interessati Compilazione NSImage con i dati da un NSURLConnection asincrono ) ma davvero non voglio seguire questa strada se io non devo per questo specifico implementazione come l'utente potrebbe potenzialmente cambiare set di dati spesso e può essere utile solo piccoli sottoinsiemi di dati.

Eventuali approcci suggeriti?

Grazie!

Aggiorna

Dopo un po 'di più il test sembra che il problema si pone perché un'azione di scorrimento attraverso il set di dati fa sì che ciascuna immagine da richiedere dal server. Una volta che tutte le immagini sono state passata sotto i dati di impostare la risposta è molto veloce.

Quindi domanda ... esiste un modo di spegnere il valueurl fetch durante lo scorrimento e riaccenderlo quando lo scorrimento è terminato?

È stato utile?

Soluzione

La mia soluzione è quella di utilizzare un meccanismo di caching su misura come quella che ho già usato per un'altra applicazione. Il problema si manifesta perché, come si scorrono le immagini del passato che non sono ancora stati scaricati, il controllo stesso trigger per andare a prendere i file come ancora non scaricato.

Una volta scaricato le immagini sono disponibili a livello locale e quindi la velocità di scorrimento normalizza. La soluzione è quella di verificare se l'immagine è disponibile a livello locale e presentare un supplente grafica app-fascio mentre l'immagine viene scaricato in background. Una volta che l'immagine è stata scaricata, aggiornare il modello con l'immagine sostituendo l'immagine stub che è venuto dal fascio.

Questo lascia l'interfaccia utente in uno stato molto reattivo in tutto, lascia l'utente con la possibilità di interagire e consente una gestione delle immagini di sfondo personalizzato.

Certo, sarebbe stato bello se Cocoa id tutto questo per me, ma poi cosa avrei lasciato fare? : -)

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