使用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教程。 据推测, totalBytesWritten
和totalBytesExpectedToWrite
都是整数类型,因此除以它们将导致截断 – 也就是说,结果的小数部分将消失。 除非结果为100%,否则积分部分始终为0,因此所有这些除法将导致零。 尝试将一个或两个变量转换为float
或double
以获得合理的结果。
此外, UIProgressView
默认情况下不接受介于0和100之间的值,但介于0和1之间。总而言之,您应该编写
self.delegate.progressView.progress = ((float)totalBytesWritten / totalBytesExpectedToWrite);
它应该工作正常。
编辑:问题是您尝试上传的数据太小而且不需要分解为较小的块,因此只需要调用此方法一次。 如果提供大量数据,那么它将只能以单独的部分发送,因此将多次调用进度处理程序回调。