3

我正在尝试刷新 UIProgressView 中的进度条以获取带有NSURLConnection. 目标是在上传图片时刷新进度条。经过几次搜索,我设法使用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 开发者工具)将我的连接设置为慢速边缘连接,以判断是否只是我的上传速度太快,但不,上传需要一段时间为 0,然后立即转到 100%该方法只被调用一次......

请问有什么想法吗?谢谢 !我不知道如何解决这个问题...

4

1 回答 1

4

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

此外,UIProgressView默认情况下不接受 0 到 100 之间的值,而是 0 到 1 之间的值。总而言之,你应该写

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

它应该可以正常工作。

编辑:问题是您尝试上传的数据太小,不需要分解成更小的块,因此只需要调用一次此方法。如果您提供大量数据,则只能分块发送,因此将多次调用进度处理程序回调。

于 2012-10-17T20:10:26.843 回答