NSURLSession не возвращает данные - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь скачать 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: @"..."] - падает, говоря, что я не могу использовать завершениеHandler, но без него - также нет ответа.

1 Ответ

0 голосов
/ 27 июня 2018

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

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

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

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

...