重新启动应用程序后如何恢复下载任务(NSURLSessionDownloadTask)
Posted
技术标签:
【中文标题】重新启动应用程序后如何恢复下载任务(NSURLSessionDownloadTask)【英文标题】:How to resume download tasks (NSURLSessionDownloadTask) after restart app 【发布时间】:2013-11-05 13:42:58 【问题描述】:我添加“下载任务”并终止应用进程。
运行app后,获取[manager downloadTasks];并恢复所有。 但是文件没有加载到文档目录中。
我使用 AFNetworking 2.0 (https://github.com/AFNetworking/AFNetworking)
完整代码 - https://github.com/nullproduction/FileDownloader
//
// DownloadsViewController.m
//
#import "DownloadsViewController.h"
@implementation DownloadsViewController
- (id)init
[self printDocumentsPath];
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:@"downloads"];
manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
NSArray *downloadTasks = [manager downloadTasks];
if (downloadTasks.count)
NSLog(@"downloadTasks: %@", downloadTasks);
// resume all
for (NSURLSessionDownloadTask *downloadTask in downloadTasks)
[downloadTask resume];
return [super init];
- (void)addDownloadTask:(id)sender
NSURL *URL = [NSURL URLWithString:@"http://www.rarlab.com/rar/wrar500.exe"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request
progress:nil
destination:^NSURL *(NSURL *targetPath, NSURLResponse *response)
NSURL *documentsDirectoryPath = [NSURL fileURLWithPath:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]];
return [documentsDirectoryPath URLByAppendingPathComponent:[targetPath lastPathComponent]];
completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error)
NSLog(@"File downloaded to: %@", filePath);
];
[downloadTask resume];
NSLog(@"%d", downloadTask.taskIdentifier);
- (void)viewDidLoad
[super viewDidLoad];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"addDownloadTask" style:UIBarButtonItemStyleBordered target:self action:@selector(addDownloadTask:)];
- (void)printDocumentsPath
NSString *documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSLog(@"%@", documentsDirectoryPath);
@end
【问题讨论】:
【参考方案1】:我注意到,下载完成后在finder中查看文档目录时文件不存在。但是,当从应用程序访问文件时,它会找到它。一段时间后(一分钟内),该文件最终出现在文档目录中。这可能是仅与模拟器有关的问题..
【讨论】:
以上是关于重新启动应用程序后如何恢复下载任务(NSURLSessionDownloadTask)的主要内容,如果未能解决你的问题,请参考以下文章
NSURLSession downloadTaskWithResumeData 在重新启动应用程序后给出错误
如何取消我恢复的 NSURLSessionDownloadTask 以恢复我上次启动应用程序时创建的下载(后台)任务