31 votes

NSMutableURLRequest n'obéissant pas à mon timeoutInterval

Je suis le POST avec une petite image, donc je voudrais l'intervalle de délai d'attente sera courte. Si l'image n'est pas d'envoyer en quelques secondes, c'est probablement jamais envoyer. Pour une raison inconnue, mon NSURLConnection n'est jamais défaut, n'importe comment, bref j'ai mis l' timeoutInterval.

// Create the URL request
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] 
                                 initWithURL:[NSURL URLWithString:@"http://www.tumblr.com/api/write"]
                                 cachePolicy:NSURLRequestUseProtocolCachePolicy
                                 timeoutInterval:0.00000001];

/* Populate the request, this part works fine */

[NSURLConnection connectionWithRequest:request delegate:self];

J'ai un point d'arrêt défini sur - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error mais il n'est jamais déclenché. Mes images continuent d'être affichées correctement, ils montrent sur Tumblr, malgré l'extrême timeoutInterval.

49voto

François P. Points 3580

Il y a un thread sur dev Apple forums de la discussion de cette question. Apparemment sur iPhone OS, le setter mandats timeoutInterval un minimum de 240 secondes (4 minutes). Cela se produit uniquement lorsque la postBody n'est pas vide (généralement lors de l'utilisation d'une requête POST). Cela semble fou, mais apparemment il est là pour vous assurer que les demandes de laisser le système, même si cela peut prendre plusieurs secondes pour que le haut débit mobile (3G) de l'interface pour se réveiller. 240 secondes semble plutôt raide, donc ils suggèrent de mettre une minuterie et d'annuler la connexion asynchrone lorsque votre minuterie se déclenche. Je sais que cela semble stupide, mais c'est le seul que j'ai réussi à obtenir de délai d'attente pour les demandes POST... :-(

5voto

brainfree Points 141

Comme François l'a mentionné ci-dessus, les 240 secondes semblait fonctionner comme il l'a décrit jusqu'à iOS 6 (y compris sur 5.1). Maintenant, ce délai apparaît sur la valeur par défaut de 60 secondes comme prévu (si vous n'avez pas explicitement défini vous-même), donc si vous avez une requête POST qui pourrait avoir invoqué le plus de temps, par inadvertance, vous pourriez avoir besoin de changer le timeoutInterval manuellement pour utiliser une valeur plus élevée. J'ai été en mesure de définir le délai au-dessous et au-dessus de 60 secondes pour un POST, donc il ne semble pas que les 60 seconde marque représente une restriction minimale pour le délai d'attente pour ce type de demande.

-2voto

user501836 Points 411

Ce problème est résolu dans iOS5, vous ne serez donc pas confronté à ce problème maintenant. Et votre code fonctionnera parfaitement

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X