NSURLConnection didSendBodyData进度
我正在使用POST请求上传一些数据到服务器,我试图根据NSURLConnection
的didSendBodyData
方法的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
希望它会帮助你。