我正在使用POST请求将一些数据上传到服务器,我正在尝试根据totalBytesWritten
didSendBodyData
方法的NSURLConnection
属性更新UIProgressView的进度}。使用下面的代码,我没有得到正确的进度视图更新,它总是0.000直到它完成。我不确定要乘以或除以什么来获得更好的上传进度。
我很感激提供任何帮助!代码:
- (void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite
{
NSNumber *progress = [NSNumber numberWithFloat:(totalBytesWritten / totalBytesExpectedToWrite)];
NSLog(@"Proggy: %f",progress.floatValue);
self.uploadProgressView.progress = progress.floatValue;
}
答案 0 :(得分:7)
您必须将bytesWritten和bytesExpected转换为float
值进行划分。
float myProgress = (float)totalBytesWritten / (float)totalBytesExpectedToWrite;
progressView.progress = myProgress;
否则,由于分割2个整数,你将获得0或其他数字。
ie:10 / 25 = 0
10.0 / 25.0 = 0.40
Objective-C提供了modulus
运算符%
来确定余数,对于除分整数非常有用。
答案 1 :(得分:2)
你的代码看起来不错。尝试使用20 MB到50 MB的大文件进行上传。
如果您使用UIProgressView,您可以在连接中设置进度:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:这样的方法:
float progress = [[NSNumber numberWithInteger:totalBytesWritten] floatValue];
float total = [[NSNumber numberWithInteger: totalBytesExpectedToWrite] floatValue];
progressView.progress = progress/total;
简单的代码:
progressView.progress = (float)totalBytesWritten / totalBytesExpectedToWrite
希望它会对你有所帮助。