NSURLSession не возвращает данные

Я пытаюсь скачать zip-архив используя NSURLSessionDataTask, Я знаю, что есть NSURLSessionDownloadTask, но дело в том, что я хочу didReceiveData обратный вызов (чтобы показать прогресс).

Код является:

NSURLRequest *request = [NSURLRequest requestWithURL:@"..."
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];

NSURLSessionConfiguration* config = [NSURLSessionConfiguration defaultSessionConfiguration];
NSOperationQueue *myQueue = [NSOperationQueue new];
myQueue.underlyingQueue = dispatch_get_main_queue();

NSURLSession *session = [NSURLSession sessionWithConfiguration:config
delegate:self 
delegateQueue:myQueue];

NSURLSessionDataTask* task = [session dataTaskWithRequest:request
completionHandler:^( NSData *data, NSURLResponse *response, NSError *error){ ... }

[task resume];

Мой класс соответствует NSURLSessionDataDelegate,

Когда я вызываю метод, через несколько секунд отладчик переходит в завершение с помощью nil данные и nil ошибка. Что я делаю неправильно?

Я также попробовал:

  • вызов без завершения Handler, затем отладчик переходит к didReceiveResponse обратный звонок с 200 ответом и все.
  • с помощью [NSOperationQueue new] для очереди
  • с помощью [NSURLSession sharedSession] - не получил ответа
  • с помощью [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier: @"..."] - падает, говоря, что я не могу использовать завершение Хендлера, но без него тоже нет ответа.

1 ответ

Итак, я нашел ответ, и это не совсем очевидно из документации: у меня было несколько обратных вызовов, и среди них didReceiveResponse,

Оказывается, мне нужно вызвать обработчик завершения для того, чтобы в будущем работали обратные вызовы, то есть: completionHandler(NSURLSessionResponseAllow);

И еще кое-что: didCompleteWithError это на самом деле делегат, который также говорит об успешном завершении, хотя из названия следует, что это обработчик ошибок. Что это означает: когда загрузка успешно завершена, эта функция вызывается с ошибкой = nil,

Надеюсь, это кому-нибудь пригодится.

Другие вопросы по тегам