AFNetworking 检查进度

Posted

技术标签:

【中文标题】AFNetworking 检查进度【英文标题】:AFNetworking check progress 【发布时间】:2012-08-16 10:30:20 【问题描述】:

我正在使用 AFNetworking 框架下载文件并将它们写入本地文件系统。

但由于文件可能相当大,我想添加一个UIProgressView,但我似乎找不到任何可以随着进度更新的方法。

我看到人们在谈论 setProgressBlock,但我在文档中找不到任何相关信息:http://afnetworking.org/Documentation/Classes/AFHTTPRequestOperation.html

有没有一种方法可以做到这一点?我只是使用AFHTTPRequestOperation 来下载文件。

【问题讨论】:

【参考方案1】:

参考以下代码。这是使用 AFNetworking 代码下载的一些文件。

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://blahblah.com/blahblah.mp3"]];
AFURLConnectionOperation *operation =   [[AFHTTPRequestOperation alloc] initWithRequest:request];

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *filePath = [paths objectAtIndex:0] stringByAppendingPathComponent:@"blahblah.mp3"];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:filePath append:NO];
[operation setDownloadProgressBlock:^(NSInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead)

    myProgressView.progress = (float)totalBytesRead / totalBytesExpectedToRead;
];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)

    NSLog(@"downloadComplete!");
];
[operation start];

【讨论】:

注意:变量 bytesRead 是一个 NSUInteger。谢谢!【参考方案2】:

setDownloadProgressBlock 方法是 AFURLConnectionOperation 的一部分,AFHTTPRequestOperation 继承自该方法 - 这就是您在 AFHTTPRequestOperation 文档中看不到它的原因。您需要的文档在这里:

http://cocoadocs.org/docsets/AFNetworking/1.3.1/Classes/AFURLConnectionOperation.html

【讨论】:

给定的 URL 不起作用。 This 是网址。 谢谢,自从我发布后,他们已经更改了文档链接(当时不存在 Cocoadocs)。我已经修改了答案。

以上是关于AFNetworking 检查进度的主要内容,如果未能解决你的问题,请参考以下文章

iOS网络访问之使用AFNetworking

AF网络。检查所有操作队列的下载进度

AFNetworking:如何知道响应是不是使用缓存? 304 或 200

如何允许用户在 iOS 中使用 AFNetworking 信任和固定自签名 SSL 证书

AFNetworking 3.0 setImageWithURLRequest 下载进度

AFNetworking 进度方法