ios:NSURLSessionDataTask并从不同视图下载

时间:2014-10-17 21:36:07

标签: ios download nsurlsession

我现在尝试在我的ios应用程序中实现后台文件下载,我有点困惑...我的应用程序中有很多不同的视图,我想开始从许多文件中下载文件它们,并在视图中显示进度。 我的目标的第一部分(下载文件)是通过在app delegate中创建一个NSURLSession来实现的,所以我可以在任何视图中获取它并开始下载文件。

在AppDelegat中

NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier: @"com.myEnglishLessons"];
sessionConfiguration.HTTPMaximumConnectionsPerHost = 111;
self.currentSession = [NSURLSession sessionWithConfiguration:sessionConfiguration
                                                    delegate:nil
                                               delegateQueue:nil];

在某些视图中

NSURLSessionDataTask *downloadTask = [[(AppDelegate *)[[UIApplication sharedApplication] delegate] currentSession] downloadTaskWithURL: myURL];
[downloadTask resume];

这一切都很好,但问题是什么 - 我无法处理并在视图中显示进度。 NSURLSession的委托是appDelegate,因此它接收下载过程的事件,但不接收视图的类。你有什么建议我的?

1 个答案:

答案 0 :(得分:1)

您可以使用downloadTask.taskDescription设置视图ID或查看类名。因此,当您从视图创建任务时,您可以编写如下内容:

NSURLSessionDataTask *downloadTask = [[(AppDelegate *)[[UIApplication sharedApplication] delegate] currentSession] downloadTaskWithURL: myURL];
[downloadTask setTaskDescription:NSStringFromClass([self class])];
[downloadTask resume];

然后您可以发送正在进行的通知URLSession方法:

    CGFloat progress = (CGFloat)totalBytesWritten/totalBytesExpectedToWrite;
    [[NSNotificationCenter defaultCenter] postNotificationName:kDownloadTaskProgressNotification object:nil
                                                      userInfo:@{@"progress": @(progress), @"viewClass": downloadTask.taskDescription];

所有观点都应遵守此通知。您还需要在收到通知时添加课程检查。