Vous devrez introduire un peu plus de code pour inclure une barre d'indicateur d'état de téléchargement. Au moment où vous téléchargez les données avec [NSData dataWithConentsOfURL:...]
. Au lieu de cela, vous allez créer une classe qui utilise un objet NSURLConnection
pour télécharger des données, accumuler ces données dans un objet MSMutableData et mettre à jour votre interface utilisateur en conséquence. Vous devriez pouvoir utiliser l'en-tête HTTP ContentLength
et les mises à jour - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
pour déterminer l'état du téléchargement.
Voici quelques méthodes pertinentes:
- (void) startDownload
{
downloadedData = [[NSMutableData alloc] init];
connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
}
- (void)connection:(NSURLConnection *)c didReceiveResponse:(NSURLResponse *)response
{
totalBytes = [response expectedContentLength];
}
// assume you have an NSMutableData instance variable named downloadedData
- (void)connection:(NSURLConnection *)c didReceiveData:(NSData *)data
{
[downloadedData appendData: data];
float proportionSoFar = (float)[downloadedData length]/(float)totalBytes;
// update UI with proportionSoFar
}
- (void)connection:(NSURLConnection *)c didFailWithError:(NSError *)error
{
[connection release];
connection = nil;
// handle failure
}
- (void)connectionDidFinishLoading:(NSURLConnection *)c
{
[connection release];
connection = nil;
// handle data upon success
}
Personnellement, je pense que la façon de le faire le plus simple est de créer une classe qui implémente les méthodes ci-dessus pour faire des téléchargements de données génériques et interface avec cette classe.
Cela devrait suffire à vous offrir ce dont vous avez besoin.