J'ai une barre de progression avec une étiquette d'accompagnement sur ma vue, et j'essaie d'afficher la progression d'un téléchargement de fichier. Voici mon code jusqu'à présentCocoa: barre de progression uniquement mise à jour vers l'avant-dernière valeur, pas finale
-(void)downloadXML {
if(responseData == nil) {
responseData = [[NSMutableData alloc] init];
}
progressView.progress = 0;
NSString* updateURL = [NSString stringWithFormat:@"http://www.myserver.com/file.xml"];
responseData = [[NSMutableData alloc] init];
NSURLRequest* updateRequest = [NSURLRequest requestWithURL: [NSURL URLWithString:updateURL]];
NSURLConnection* connection = [[NSURLConnection alloc] initWithRequest:updateRequest delegate:self];
[connection start];
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
[responseData setLength:0];
filesize = [[NSNumber numberWithLong: [response expectedContentLength] ] retain];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[responseData appendData:data];
NSNumber* curLength = [NSNumber numberWithLong:[responseData length] ];
float progress = [curLength floatValue]/[filesize floatValue] ;
NSString *labelText = [NSString stringWithFormat:@"Downloading file: %@%", domicile, progress];
progressView.progress = progress;
progressLabel.text = labelText;
NSLog(@"File Size: %f, Download Progress: %f", [filesize floatValue], progress);
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
progressView.progress = 0;
[filesize release];
[connection release];
}
Le téléchargement fonctionne très bien, mais la barre de progression et l'étiquette ne semblent pas fonctionner correctement. La sortie de la console ressemble à ceci et montre que le fichier est en train de télécharger correctement.
2010-11-18 15:46:51.141 Fund Prices[8096:207] File Size: 1300.000000, Download Progress: 0.318615
2010-11-18 15:46:51.141 Fund Prices[8096:207] File Size: 1300.000000, Download Progress: 0.427615
2010-11-18 15:46:51.141 Fund Prices[8096:207] File Size: 1300.000000, Download Progress: 0.651215
2010-11-18 15:46:51.274 Fund Prices[8096:207] File Size: 1300.000000, Download Progress: 1.000000
Cependant, la barre de progression et l'étiquette ne sont mises à jour que vers l'avant-dernière valeur. c'est-à-dire que la barre passera à un peu plus de la moitié et l'étiquette sera mise à jour à 0,651215.
Y a-t-il une raison pour laquelle la valeur finale n'est pas envoyée aux deux éléments?
J'ai mis un [NSThread sleepForTimeInterval: 5]; ligne dans la méthode didFinishLoading, mais cela n'a rien changé. Je trouve intéressant que la valeur correcte soit la sortie vers la console, mais pas vers l'étiquette. – Typhoon101
Est-ce que quelqu'un a des idées? – Typhoon101