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

标签 ios ios5 ios6 nsurlconnection nsurlconnectiondelegate

我正在尝试为使用 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 教程。totalBytesWrittentotalBytesExpectedToWrite 都是整数类型,因此将它们相除将得到截断 - 也就是说,结果的小数部分将消失。除非结果为 100%,否则整数部分始终为 0,因此所有这些除法都将导致零。尝试将一个或两个变量转换为 floatdouble 以获得合理的结果。

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

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

它应该可以正常工作。

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

关于ios - 使用 NSURLConnection 上传时将进度设置为 UIProgressView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12942464/

相关文章:

iphone - 您可以使用 list 或网络存储在 iOS 网络应用程序中缓存声音文件吗?

iphone - iOS 6 NSDateFormatter stringFromDate : empty day of week

ios - 使用 UIImagePickerControllerSourceTypeSavedPhotosAlbum 从库中选择

php - iOS - 发送值的静默推送通知

ios - 新的 PayPal iOS SDK(1.0.5) - 无法连接到沙箱

ios - Swift:过滤数组中的每 4 个项目

ios - 防止二次触摸生效

ios - Cocos 2d画线不起作用

ios - 如何获得 map 上的中心位置和可见半径?

objective-c - gdb 远程返回错误 : E08 when calling completion block (EXC_BAD_ACCESS)