2010-02-15 5 views
24

Je souhaite afficher une barre de progression pendant le téléchargement avec NSURLConnection. Comme je reçois des données du serveur, je pourrais mettre à jour l'interface utilisateur pour chaque paquet reçu. Mais le problème est: comment puis-je déterminer combien de données j'ai déjà, et combien de données doivent être téléchargées? Probablement en octets ... Et puis je dois faire quelques calculs pour obtenir le pourcentage?Comment faire une barre de progression pour un NSURLConnection lors du téléchargement d'un fichier?

Répondre

63

Dans votre délégué NSURLConnection, implémentez quelque chose comme ceci pour connaître la longueur totale du contenu. Le serveur doit prendre en charge, mais il sera très probablement travailler très bien avec le contenu statique:

- (void)connection: (NSURLConnection*) connection didReceiveResponse: (NSHTTPURLResponse*) response 
{ 
    statusCode_ = [response statusCode]; 
    if (statusCode_ == 200) { 
     download_.size = [response expectedContentLength]; 
    } 
} 

Et puis mettre à jour des progrès comme ceci:

- (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 
} 

Dans mon cas, j'ai une instance de téléchargement qui a size et progress propriétés. Ils appartiennent à un objet global DownloadManager qui prendra soin de notifier les parties intéressées de la progression du téléchargement ou des changements d'état.

Questions connexes