我现在尝试在我的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,因此它接收下载过程的事件,但不接收视图的类。你有什么建议我的?
答案 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];
所有观点都应遵守此通知。您还需要在收到通知时添加课程检查。