J'ai l'implémentation ci-dessous de NSURLSession
.délégué NSURLSession didCompleteWithError pas appelé
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]];
}
et je l'ai mis en œuvre les methds délégué ci-dessous:
- (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
la variable « fini » pour en boucle au-dessus est à 1 lorsque délégué didCompleteWithError
est reçue quand indique qu'il ya une question comme réseau vers le bas, etc ...
Lorsque le réseau est en panne, je n'obtiens pas didCompleteWithErrorcallback
, par conséquent la boucle while ne se ferme pas même si 10sec timeout a été spécifié et mon application se bloque en donnant Avertissement de la mémoire.
Je reçois correctement le rappel de didReceiveData, didReceiveResponse dans tous les scenarious. Je n'ai pas vérifié le rappel de didReceiveChallenge car il nécessite l'installation HTTP ici.
donc, j'ai la suite des questions à poser, si vous pouvez me aider:
1) Pourquoi est-didCompleteWithError
rappel pas reçu lorsque le réseau est en panne?
2) En l'absence de problèmes de réseau, didCompleteWithError
est-il reçu en cas de succès de la tâche? Si non, quel rappel indiquerait l'achèvement de la tâche, par exemple connectionDidFinishLoading
lors de l'utilisation de NSURLConnection
?
J'ai utilisé la politique de cache dans le paramètre request lors du démarrage de la tâche. Est-ce à cause de cela que didcompletewitherror n'est pas appelé n à la place le délégué de mise en cache doit être implémenté?
Les gars, S'il vous plaît aider. Je suis coincé.
Thankyou
Ne touchez pas la boucle d'exécution à moins que le projet ne soit une interface de ligne de commande sans boucle d'exécution implicite – vadian
Qu'en est-il des autres méthodes de délégation? sont-ils appelés quand il n'y a pas de panne dans netwrok? –
ok. Je comprends ton point de vue . Mais pourquoi la méthode de mon délégué n'est-elle pas appelée? pourriez-vous s'il vous plaît suggérer quelque chose? – CodeTry