使用NSURLConnection上载时,将进度设置为UIProgressView

我正在尝试使用NSURLConnection刷新UIProgressView中的进度条以获取上传请求。 目标是在上传图片时刷新进度条。 经过几次搜索,我设法使用我的连接委托的didSendBodyData来检查这样的进度:

 - (void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite { if([self.delegate respondsToSelector:@selector(progressView)]) { self.delegate.progressView.progress = (totalBytesWritten / totalBytesExpectedToWrite) * 100.0; } } 

一切正常,但问题是这种方法只被调用一次……所以酒吧暂时停留在0%,然后立即转到100%没有中间。 我尝试(在iPhone上使用iOS6 develloper工具)将我的连接设置为慢速边缘连接以确定是否只是我的上传太快,但不是,上传需要一段时间为0,然后立即转到100%该方法只被调用一次……

有什么想法吗? 谢谢 ! 我无法想办法解决这个问题……

您应该阅读有关数值类型的C教程。 据推测, totalBytesWrittentotalBytesExpectedToWrite都是整数类型,因此除以它们将导致截断 – 也就是说,结果的小数部分将消失。 除非结果为100%,否则积分部分始终为0,因此所有这些除法将导致零。 尝试将一个或两个变量转换为floatdouble以获得合理的结果。

此外, UIProgressView默认情况下不接受介于0和100之间的值,但介于0和1之间。总而言之,您应该编写

 self.delegate.progressView.progress = ((float)totalBytesWritten / totalBytesExpectedToWrite); 

它应该工作正常。

编辑:问题是您尝试上传的数据太小而且不需要分解为较小的块,因此只需要调用此方法一次。 如果提供大量数据,那么它将只能以单独的部分发送,因此将多次调用进度处理程序回调。