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
,
Надеюсь, это кому-нибудь пригодится.