我正在使用AFNetworking,我有一个AFURLConnectionOperation来下载文件 - 如下所示:
AFURLConnectionOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:filePath append:NO];
[operation setDownloadProgressBlock:^(NSUInteger bytesRead,long long totalBytesRead,long long totalBytesExpectedToRead) {
// Update progress stuff
}];
[operation setCompletionBlock:^{
// Do completion stuff
}];
[operation start];
此代码包含在一个方法中,并且完美运行....直到我尝试下载第二个文件。
此时,第一个操作的downloadProgressBlock
停止被调用。 但是,第一次下载仍然继续,最后调用completionBlock
- 只是没有任何进度更新。
我认为这可能与保留/ ARC /其他任何事情有关,但老实说我不知道 - 这对我没有意义。一切都运行良好,直到第二次下载开始,尽管这些方法是分开调用的,operation
变量和进度块不相互依赖,相互引用或绝对做任何相关的事情!< / p>
编辑:我还没有找到此问题的原因/解决方案,但我找到并发布了使用不同AFNetworking方法下载文件的解决方法。如果有人可以解决原始问题,请发一个答案,我会奖励你的赏金。
答案 0 :(得分:0)
我从未解决过这个问题,但我找到了解决方法。问题中的示例代码来自早期版本的AFNetworking上的wiki。我再次检查过,现在看来他们已经更新了他们建议的下载文件的方法,所以我现在使用这段代码:
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
NSURL *URL = [NSURL URLWithString:@"http://example.com/download.zip"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
NSProgress *progress;
NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:&progress destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
NSLog(@"File downloaded to: %@", filePath);
}];
[downloadTask resume];
与this StackOverflow answer结合以观察NSProgress
更新。这完美地工作并实现了我想要的行为,尽管它有点复杂。