Desidero visualizzare una barra di avanzamento mentre è in corso un download con NSURLConnection. Mentre ricevo dati dal server, posso aggiornare l'interfaccia utente per ogni pacchetto ricevuto. Ma il problema è: come faccio a capire quanti dati ho già e quanti dati devono essere scaricati? Probabilmente in bytes ... E poi devo fare un po 'di matematica per ottenere la percentuale?Come creare una barra di avanzamento per una connessione NSURLC quando si scarica un file?
24
A
risposta
63
Nella tua NSURLConnection
delegato, implementare qualcosa di simile per scoprire la lunghezza totale dei contenuti. Il server dispone di sostenere questo, ma è molto probabile che funzionare bene con contenuti statici:
- (void)connection: (NSURLConnection*) connection didReceiveResponse: (NSHTTPURLResponse*) response
{
statusCode_ = [response statusCode];
if (statusCode_ == 200) {
download_.size = [response expectedContentLength];
}
}
e quindi aggiornare i progressi in questo modo:
- (void) connection: (NSURLConnection*) connection didReceiveData: (NSData*) data
{
[data_ appendData: data];
download_.progress = ((float) [data_ length]/(float) download_.size);
// Broadcast a notification with the progress change, or call a delegate
}
Nel mio caso ho un esempio di download che ha size
e progress
proprietà. Sono di proprietà di un oggetto globale DownloadManager
che si prenderà cura di informare le parti interessate dell'avanzamento del download o delle modifiche dello stato.