2010-04-29 15 views
30

Je poste une petite image, donc je voudrais que l'intervalle de délai soit court. Si l'image n'est pas envoyée dans quelques secondes, elle ne sera probablement jamais envoyée. Pour une raison inconnue, mon NSURLConnection n'échoue jamais, peu importe combien je mets le timeoutInterval.NSMutableURLRequest n'obéissant pas à mon 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'a jamais été déclenché. Mes images continuent d'être affichées très bien, elles apparaissent sur Tumblr malgré le minuscule timeoutInterval.

Répondre

49

Il y a a thread on Apple dev forums discussing this issue. Apparemment sur iPhone OS, le setter impose timeoutInterval un minimum de 240 secondes (4 minutes). Cela se produit uniquement lorsque le 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 s'assurer que les demandes quittent le système, même si cela peut prendre plusieurs secondes pour que l'interface WWAN (3G) se réveille. 240 secondes semble plutôt raide, alors ils suggèrent de régler une minuterie et d'annuler la connexion asynchrone lorsque votre minuteur se déclenche. Je sais que cela semble stupide, mais c'est le seul que j'ai réussi à obtenir le délai d'attente pour les demandes POST ... :-(

+1

C'est odieux. Avez-vous un lien vers la discussion? Aucune de mes recherches n'a révélé quoi que ce soit. – kubi

+4

https://devforums.apple.com/message/108292#108292 –

+0

Cool. Merci beaucoup. – kubi

-2

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

+0

Je ne sais pas d'où vous obtenez ces informations, mais en pratique, je cours sur 5.1.1 et c'est ne pas écouter mon plus petit 'timeoutInterval' – DonnaLea

+1

il est fixé dans iOS 6 à la place. – Raptor

+2

il n'est toujours pas fixé dans ios 7.1 ou il a réapparu –

5

Comme François mentionné ci-dessus, les 240 secondes semblaient fonctionner comme il a décrit jusqu'à iOS 6 (y compris sur 5.1). Maintenant, ce délai semble prendre la valeur par défaut de 60 secondes comme prévu (si vous ne l'avez pas explicitement défini vous-même), donc si vous avez une requête POST qui aurait pu compter sur le temps plus long par inadvertance, vous devrez peut-être changer manuellement le timeoutInterval pour utiliser une valeur plus élevée. au-dessous et au-dessus de 60 secondes pour un POST donc il ne semble pas que la marque de 60 secondes représente une restriction minimale o le délai d'attente pour ce type de requête non plus.