J'essaye d'intégrer un objet NSURLConnection avec UIProgressView, ainsi je peux mettre à jour l'utilisateur pendant qu'un téléchargement de fichier se produit en arrière-plan.Comment intégrer NSURLConnection avec UIProgressView?
J'ai créé un objet séparé pour télécharger le fichier en arrière-plan, et je n'arrive pas à trouver comment mettre à jour la propriété progress dans l'objet UIProgressView avec la valeur correcte. C'est probablement quelque chose de très simple, mais je n'arrive pas à me débrouiller avec Googling.
Voici le code que j'ai:
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
[self.resourceData setLength:0];
self.filesize = [NSNumber numberWithLongLong:[response expectedContentLength]];
NSLog(@"content-length: %d bytes", self.filesize);
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[self.resourceData appendData:data];
NSNumber *resourceLength = [NSNumber numberWithUnsignedInteger:[self.resourceData length]];
NSLog(@"resourceData length: %d", [resourceLength intValue]);
NSLog(@"filesize: %d", self.filesize);
NSLog(@"float filesize: %f", [self.filesize floatValue]);
progressView.progress = [resourceLength floatValue]/[self.filesize floatValue];
NSLog(@"progress: %f", [resourceLength floatValue]/[self.filesize floatValue]);
}
Comme vous pouvez le voir, la variable membre resourceData contient les données de fichier tel qu'il est en cours de téléchargement. La variable de membre taille de fichier contient la taille complète du fichier, tel que renvoyé par mon service Web dans son en-tête Content-Length. Tout fonctionne en quelque sorte OK, je continue à obtenir les données téléchargées avec plusieurs exécutions de didReceiveData comme je devrais, mais quand j'essaie de calculer la valeur de progression, aucune valeur correcte n'est retournée. Voir ci-dessous pour un petit échantillon de ce que je reçois dans mon journal de la console:
content-length: 4687472 bytes
resourceData length: 2904616
filesize: 4687472
float filesize: -1.000000
progress: -2904616.000000
Pour référence, progressView.progress est un flotteur. taille de fichier est un NSNumber qui tient longtemps. Enfin, resourceLength est un NSNumber qui contient un NSUInteger.
Qu'est-ce qui me manque ici?
Qu'est-ce qui est enregistré sur la console lorsque vous exécutez cette opération? Les champs de progression sont-ils correctement imprimés? –
Ben, vient d'ajouter un échantillon du journal de la console. – jpm