2010-11-18 27 views
0

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?

Répondre

0

-connectionDidFinishLoading: peut être envoyé avant le message final -connection:didRecieveData:. Je casse le -connectionDidFinishLoading: et vérifie.

+0

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

+0

Est-ce que quelqu'un a des idées? – Typhoon101