NSURLConnection didSendBodyData进展

时间:2014-06-12 16:09:41

标签: ios objective-c nsurlconnection uiprogressview nsurlconnectiondelegate

我正在使用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;
}

2 个答案:

答案 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

希望它会对你有所帮助。