【发布时间】:2010-09-23 16:34:27
【问题描述】:
我正在尝试将 NSURLConnection 对象与 UIProgressView 集成,以便在后台下载文件时更新用户。
我创建了一个单独的对象来在后台下载文件,但在弄清楚如何使用正确的值更新 UIProgressView 对象中的进度属性时遇到了问题。这可能是非常简单的事情,但我无法通过谷歌搜索找到它。
这是我的代码:
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
[self.resourceData setLength:0];
self.filesize = [NSNumber numberWithLongLong:[response expectedContentLength]];
NSLog(@"content-length: %d bytes", self.filesize);
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[self.resourceData appendData:data];
NSNumber *resourceLength = [NSNumber numberWithUnsignedInteger:[self.resourceData length]];
NSLog(@"resourceData length: %d", [resourceLength intValue]);
NSLog(@"filesize: %d", self.filesize);
NSLog(@"float filesize: %f", [self.filesize floatValue]);
progressView.progress = [resourceLength floatValue] / [self.filesize floatValue];
NSLog(@"progress: %f", [resourceLength floatValue] / [self.filesize floatValue]);
}
如您所见,resourceData 成员变量保存正在下载的文件数据。 filesize 成员变量保存文件的完整大小,由我的 Web 服务在其 Content-Length 标头中返回。
一切正常,我通过多次执行 didReceiveData 继续获取下载的数据,但是当我尝试计算进度值时,没有返回正确的值。请参阅下面的控制台日志中的一小部分示例:
content-length: 4687472 bytes
resourceData length: 2904616
filesize: 4687472
float filesize: -1.000000
progress: -2904616.000000
作为参考,progressView.progress 是一个浮点数。 filesize 是一个持有 long long 的 NSNumber。最后,resourceLength 是一个包含 NSUInteger 的 NSNumber。
我在这里错过了什么?
【问题讨论】:
-
运行此命令时控制台会记录什么?进度字段是否正确打印?
-
Ben,刚刚添加了控制台日志的示例。
标签: ios objective-c iphone cocoa-touch