3

我正在使用AFNetworking框架來促進照片上傳到網站。上傳工作正常,但我需要在UIProgressView中顯示進度。問題在於,上傳開始後,進度從0到100%左右從100%上升到100%,這取決於上傳的照片數量。我使用單個請求一次上傳1到6張照片。關於這裏發生了什麼的任何想法? AFNetworking是否不包括照片的大小?
它正確顯示的NSLog:AFNetworking setUploadProgressBlock不表現直接到100%

2012-04-03 10:49:45.498 PhotoUp[3689:2207] Sent 32768 of 217931 bytes 
2012-04-03 10:49:45.499 PhotoUp[3689:2207] Sent 65536 of 217931 bytes 
2012-04-03 10:49:45.501 PhotoUp[3689:2207] Sent 98304 of 217931 bytes 
2012-04-03 10:49:45.502 PhotoUp[3689:2207] Sent 131072 of 217931 bytes 
2012-04-03 10:49:47.795 PhotoUp[3689:2207] Sent 134310 of 217931 bytes 
2012-04-03 10:49:49.070 PhotoUp[3689:2207] Sent 136730 of 217931 bytes 
2012-04-03 10:49:50.819 PhotoUp[3689:2207] Sent 139150 of 217931 bytes 
2012-04-03 10:49:52.284 PhotoUp[3689:2207] Sent 141570 of 217931 bytes 

下面的代碼:

NSString *numberOfPhotosAsString = [NSString stringWithFormat:@"%d", numberOfPhotos]; 


NSString *fileBase = @"file0_"; 
NSString *fileNameBase = @"SourceName_"; 
NSURL *url = [NSURL URLWithString:@"http://www.mywebsite.com"]; 
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url]; 
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
         numberOfPhotosAsString, @"PackageFileCount", 
         wtID, @"wtID", 
         @"PU", @"type", 
         nil]; 
for (int i= 0; i < numberOfPhotos; i++) 
{ 
    [params setObject:[fileNames objectAtIndex:i] forKey:[fileNameBase stringByAppendingFormat:@"%i", i]]; 
} 

NSMutableURLRequest *request = [httpClient multipartFormRequestWithMethod:@"POST" path:@"/ReceivePhoto.aspx" parameters:params constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) { 

for (int i = 0; i < numberOfPhotos; i++) 
{ 
    // may want to experiment with the compression quality (0.5 currently) 
    NSData *imageData = UIImageJPEGRepresentation([images objectAtIndex:i], 0.5); 
    [formData appendPartWithFileData:imageData name:[fileBase stringByAppendingFormat:@"%i", i] fileName:[fileNames objectAtIndex:i] mimeType:@"image/jpeg"]; 
} 
}]; 

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 

[operation setUploadProgressBlock:^(NSInteger bytesWritten, NSInteger totalBytesWritten, NSInteger totalBytesExpectedToWrite) { 
    NSLog(@"Sent %d of %d bytes", totalBytesWritten, totalBytesExpectedToWrite); 
    float progress = totalBytesWritten/totalBytesExpectedToWrite; 
    [selectLabel setText:[NSString stringWithFormat:@"%d", progress]]; 
    [progressView setProgress: progress]; 
    //[testProgressView setProgress:progress]; 
}]; 
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 

    [self imageRequestDidFinish]; 


} 
            failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
             NSLog(@"error: %@", operation.responseString); 

            } 
]; 

回答

7

此行確實整數除法:

float progress = totalBytesWritten/totalBytesExpectedToWrite; 

你需要轉換至少一個操作數爲float :

float progress = totalBytesWritten/(float)totalBytesExpectedToWrite; 
+1

我試圖發佈該答案,但沒有足夠的代表在8小時內回答自己的問題。你是正確的,但是,新秀的錯誤!謝謝! – HackyStack 2012-04-03 15:18:38