У меня есть реализация ниже NSURLSession
.NSURLSession делегат didCompleteWithError не называется
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
self.session = [NSURLSession sessionWithConfiguration:configuration
delegate:self
delegateQueue: nil];
NSURLSessionDataTask *task = [self.session dataTaskWithRequest:request];
[task resume];
while(!finished) {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:100000]];
}
и я реализовывали ниже делегата methds:
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)aresponse
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didCompleteWithError:(NSError *)error
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition,
NSURLCredential *credential))completionHandler
«закончил» переменная во время цикла выше устанавливается в 1, когда didCompleteWithError
делегат получил, когда указывает на то, что есть какой-то вопрос, как сети вниз, и т. д.
Когда сеть отключена, я не получаю didCompleteWithErrorcallback
, поэтому цикл while не выйдет, хотя был указан тайм-аут 10sec, и мое приложение вылетает, давая Предупреждение памяти.
Я правильно принимаю didReceiveData, didReceiveResponse callback во всех сценариях. Не проверял callReceiveChallenge, хотя для этого требуется настройка HTTP.
так, я на следующие вопросы, чтобы спросить, если вы можете мне помочь:
1) Почему didCompleteWithError
обратный вызов не получен, когда сеть вниз?
2) Если нет проблем с сетью, возникает didCompleteWithError
ответ на успешное завершение задания? Если нет, какой обратный вызов указывает на завершение задачи, например connectionDidFinishLoading
при использовании NSURLConnection
?
Я использовал кэширование в параметре запроса при запуске задачи. Это из-за этого, что didcompletwitherror не называется n, а кэширование делегата должно быть реализовано ??
Ребята, пожалуйста, помогите. Я застрял.
Thankyou
Не прикасайтесь к циклу запуска, если проект не является интерфейсом командной строки без неявного цикла запуска – vadian
. Что относительно других методов делегата? они называются, когда нет пробоя в сети? –
ОК. Японял твою точку зрения . Но почему мой метод делегата не вызван? не могли бы вы предложить что-нибудь? – CodeTry