如何在其他ViewControllers

时间:2015-11-14 08:13:48

标签: ios objective-c uiviewcontroller nsurlsession nsurlsessiondownloadtask

在特定viewController中有几个要下载的文件。当用户点击下载特定文件时,progressView似乎显示下载的数据量。此外,在特定时间可以下载多个文件。由于文件非常大,因此完成下载需要几分钟的时间。问题是,当我转到另一个ViewController时,所有下载都会停止,我必须继续下载ViewController并等待下载完成。我正在使用NSURLSession下载数据。即使下载ViewController被解除,有没有办法让下载进行?

一种选择是我将代码转移到appDelegate。有没有其他方便的方法来完成这项任务。

1 个答案:

答案 0 :(得分:1)

试着看看AFNetworking https://github.com/AFNetworking/AFNetworking

您可以在Appdelegate中定义此部件,但一定要使它们可见(属性)

    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];

然后在任何视图中获取它们并开始下载任务

NSURL *URL = [NSURL URLWithString:@"http://example.com/download.zip"];

NSURLRequest *request = [NSURLRequest requestWithURL:URL];

NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil 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];
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }];