Я начинаю внедрять метод загрузки с использованием NSURLSession и успешно загружать разные файлы из нескольких запросов. Но теперь я хотел добавить отслеживание прогресса, однако делегаты для загрузки не запускаются.NSURLSessionDownloadTask Делегаты, не вызывающие метод didWriteData
Вот мой код:
NSURLSessionConfiguration *defaultConfigObject = NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate:self delegateQueue:nil];
NSURLSessionDownloadTask * downloadTask = [defaultSession downloadTaskWithRequest:request completionHandler:^(NSURL * __nullable location,
NSURLResponse * __nullable response, NSError * __nullable error) {
NSData *data = [NSData dataWithContentsOfURL:location];
[[NSFileManager defaultManager] createFileAtPath:docPath contents:data attributes:nil];
if ([[NSFileManager defaultManager] fileExistsAtPath:docPath]) {
NSDictionary *notificationDic = [[NSDictionary alloc] initWithObjectsAndKeys:docPath,@"docPath", item, @"item", nil];
[[NSNotificationCenter defaultCenter] postNotificationName: @"openFile" object:nil userInfo:notificationDic];
}
}];
[downloadTask resume];
У меня есть NSURLSessionDownloadDelegate на моем файле заголовка.
Мне нужно было использовать обработчик завершения для выполнения различных задач с файлом.
Есть ли способ, я могу это сделать?
Не связанный с вопросом, но я бы посоветовал использовать 'createFileAtPath'. Одним из преимуществ «NSURLSessionDownloadTask» является то, что он передает загрузку непосредственно в постоянное хранилище, что дает вам преимущество в использовании данных dataWithContentsOfURL и 'createFileAtPath: contents:'. Вместо этого я мог бы предложить обходить загрузку в «NSData» и использовать метод 'NSFileManager'' moveItemAtURL', чтобы переместить его из 'location' в' [NSURL fileURLWithPath: docPath] '. – Rob
@Rob сделаю. Спасибо. –