Je crée un NSMutableRequest
:délai d'attente NSURLSessionDataTask demandes ultérieures à défaut
self.req = [NSMutableURLRequest requestWithURL:myURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10.0];
Le délai d'attente est fixé à 10 secondes parce que je ne veux pas l'utilisateur d'attendre trop longtemps pour obtenir une rétroaction. Après que je crée un NSURLSessionDataTask
:
NSURLSessionDataTask *task = [self.session dataTaskWithRequest:self.req completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSHTTPURLResponse * httpResp = (NSHTTPURLResponse *)response;
if (error) {
// this is where I get the timeout
}
else if (httpResp.statusCode < 200 || httpResp.statusCode >= 300) {
// handling error and giving feedback
}
else {
NSError *serializationError = nil;
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&serializationError];
}
[task resume];
}
Le problème est le serveur passe en passerelle Délai d'attente et il faut beaucoup de temps. Je reçois l'erreur timeout et je donne un retour à l'utilisateur, mais tous les appels API suivants échouent de la même manière en raison d'une erreur de timeout. La seule façon de l'arrêter est de tuer l'application et recommencer. Y at-il quelque chose que je devrais faire pour tuer la tâche ou la connexion après une erreur de timeout? Si je ne définis pas de délai d'attente et que j'attends de recevoir le code d'erreur du serveur, tous les appels suivants fonctionnent parfaitement (mais l'utilisateur attend beaucoup!).
J'ai essayé d'annuler la tâche:
NSURLSessionDataTask *task = [self.session dataTaskWithRequest:self.req completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSHTTPURLResponse * httpResp = (NSHTTPURLResponse *)response;
if (error) {
// this is where I get the timeout
[task cancel];
}
...
[task resume];
}
Je suppose que, vous pourriez avoir besoin de ré-initialiser le 'self.req' s'il y a une erreur/délai d'attente. Pas sûr à ce sujet cependant. – Mrunal
essayez d'appeler les connexions avec l'application POSTMAN en chrome, et voir si vous obtenez toujours l'erreur de délai d'attente ou non –
Êtes-vous Créer cette tâche dans un bloc? Ou un autre fil, autre que le fil principal? –