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

时间:2012-10-17 20:05:24

标签: ios ios5 ios6 nsurlconnection nsurlconnectiondelegate

我正在尝试使用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%该方法只被调用一次......

请问好吗?谢谢 !我无法想办法解决这个问题......

1 个答案:

答案 0 :(得分:4)

你应该真正阅读关于数字类型的C教程。大概totalBytesWrittentotalBytesExpectedToWrite都是整数类型,所以除以它们会导致截断 - 也就是说,结果的小数部分将消失。除非结果为100%,否则积分部分始终为0,因此所有这些除法将导致零。尝试将一个或两个变量投射到floatdouble以获得合理的结果。

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

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

它应该可以正常工作。

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