2014-10-17 2 views
0

Теперь я пытаюсь реализовать загрузку фонового файла в моем приложении ios, и я немного смущен ... У меня есть много разных просмотров в моем приложении, и я хочу начать загрузку файлов со многих из них и показать прогресс в представлении. Первая часть моей цели (загрузка файлов) была реализована путем создания одной NSURLSession в делегате приложения, поэтому я могу получить ее в любом представлении и начать загрузку файла.ios: NSURLSessionDataTask и загрузка с разных точек зрения

В 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

Вы можете использовать downloadTask.taskDescription, чтобы установить идентификатор вида или просмотреть имя класса. Поэтому, когда вы создаете задачу с точки зрения можно было бы написать так:

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]; 

и все мнения должны соблюдать это уведомление. также вам нужно добавить проверку класса, когда вы получите уведомление.

+0

Большое спасибо, попробуем это! –

+0

Я не могу получить правильное значение значения taskDescription при чтении позже после его установки при создании. – Angie