当使用NSURLConnection上传时,将进度设置为UIProgressView
问题描述:
我正在尝试刷新UIProgressView中的进度栏以获取NSURLConnection
的上传请求。目标是在上传图片的同时刷新进度条。经过几次的搜索,我设法用我的连接委托的didSendBodyData
检查这样的进展:当使用NSURLConnection上传时,将进度设置为UIProgressView
- (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工具)将我的连接设置为慢速连接,以判断上传是否太快,但不是,上传需要一段时间,然后立即变为100%该方法只被称为一次...
任何想法请吗?谢谢 !我不知道如何解决这个问题...
答
你应该真正阅读数字类型的C教程。推测totalBytesWritten
和totalBytesExpectedToWrite
是一个整数类型,所以将它们分开将会导致截断 - 也就是说,结果的小数部分将会消失。除非结果为100%,否则积分部分始终为0,因此所有这些分数都将为零。尝试将一个或两个变量投射到float
或double
以获得明智的结果。
此外,UIProgressView
默认情况下不接受0到100之间的值,但所有的一切0和1之间,你应该写
self.delegate.progressView.progress = ((float)totalBytesWritten/totalBytesExpectedToWrite);
,它应该工作的罚款。
编辑:问题在于您试图上传的数据太小,并且不需要将其细分为更小的块,因此有必要仅调用一次该方法。如果您提供了大量的数据,那么它将只能以单独的部分发送,因此进度处理程序回调将被多次调用。
谢谢你的回答,是的,我明白我的错误在这里,但问题不是这一个......我的行当然是错误的,但问题是当我'NSLog'调用方法来检查' bytesWritten','totalBytesWritten'和'totalBytesExpectedToWrite',我清楚地看到该方法只被调用一次,所有的值都等于'totalBytesWritten',所以没有进展,只有0到100 ... –
@FabienParseError也许数据太小而不能以较小的块切割。 – 2012-10-17 20:20:14
谢谢@ H2CO3!就是这样!我试图同时上传10张照片,现在进度条显示中间体;)对不起,感谢您的帮助! –