我正在尝试为使用 NSURLConnection
的上传请求刷新 UIProgressView 中的进度条。目标是在上传图片的同时刷新进度条。经过几次搜索,我设法使用我的连接委托(delegate)的 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% 并且该方法只被调用一次...
有什么想法吗?谢谢 !我不知道如何解决这个问题......
最佳答案
您应该真正阅读有关数字类型的 C 教程。totalBytesWritten
和 totalBytesExpectedToWrite
都是整数类型,因此将它们相除将得到截断 - 也就是说,结果的小数部分将消失。除非结果为 100%,否则整数部分始终为 0,因此所有这些除法都将导致零。尝试将一个或两个变量转换为 float
或 double
以获得合理的结果。
此外,UIProgressView
默认情况下不接受 0 到 100 之间的值,但接受 0 到 1 之间的值。总而言之,你应该这样写
self.delegate.progressView.progress = ((float)totalBytesWritten / totalBytesExpectedToWrite);
它应该可以正常工作。
编辑:问题是您尝试上传的数据太小,不需要分解成更小的 block ,所以只需要调用一次此方法.如果您提供大量数据,那么它只能分块发送,因此进度处理程序回调将被多次调用。
关于ios - 使用 NSURLConnection 上传时将进度设置为 UIProgressView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12942464/