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