NSURLConnection didSendBodyData进度

我正在使用POST请求上传一些数据到服务器,我试图根据NSURLConnectiondidSendBodyData方法的totalBytesWritten属性更新UIProgressView的进度。 使用下面的代码,我没有得到适当的进度视图更新,它始终为0.000,直到完成。 我不确定要乘以或除以获得更好的上传进度。

我会很感激提供的任何帮助! 码:

 - (void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite { NSNumber *progress = [NSNumber numberWithFloat:(totalBytesWritten / totalBytesExpectedToWrite)]; NSLog(@"Proggy: %f",progress.floatValue); self.uploadProgressView.progress = progress.floatValue; } 

您必须将bytesWritten和bytesExpected作为float值进行分配。

 float myProgress = (float)totalBytesWritten / (float)totalBytesExpectedToWrite; progressView.progress = myProgress; 

否则,你将得到一个0或其他数字作为分割2个整数的结果。

即: 10 / 25 = 0

10.0 / 25.0 = 0.40

Objective-C为确定余数提供了modulus运算符% ,对于整数除法是有​​用的。

你的代码看起来不错。 尝试使用20 MB到50 MB的大文件进行上传。

如果您使用UIProgressView,则可以在连接中设置进度:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:方法如下:

  float progress = [[NSNumber numberWithInteger:totalBytesWritten] floatValue]; float total = [[NSNumber numberWithInteger: totalBytesExpectedToWrite] floatValue]; progressView.progress = progress/total; 

在简单的代码中:

 progressView.progress = (float)totalBytesWritten / totalBytesExpectedToWrite 

希望它会帮助你。