NSMutableURLRequest no obedeciendo mi timeoutInterval


Estoy publicando una imagen pequeña, así que me gustaría que el intervalo de tiempo fuera corto. Si la imagen no se envía en unos segundos, probablemente nunca se enviará. Por alguna razón desconocida, mi NSURLConnection nunca falla, no importa cuán corto sea el 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];

Tengo un punto de interrupción establecido en - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error pero nunca se está activando. Mis imágenes siguen siendo publicadas muy bien, están apareciendo en Tumblr a pesar de la pequeña timeoutInterval.

Author: kubi, 2010-04-29

3 answers

Hay un hilo en los foros de Apple dev discutiendo este tema. Al parecer, en el iPhone OS, los mandatos setter timeoutInterval un mínimo de 240 segundos (4 minutos). Esto solo ocurre cuando el postBody no está vacío (normalmente cuando se usa una solicitud POST). Esto parece una locura, pero aparentemente está ahí para asegurarse de que las solicitudes abandonen el sistema a pesar de que puede tomar muchos segundos para que la interfaz WWAN (3G) se despierte. 240 segundos parece bastante empinado, por lo que sugieren establecer un temporizador y cancelar la conexión asíncrona cuando se dispara el temporizador. Sé que esto parece estúpido, pero eso es lo único que me las arreglé para obtener tiempo de espera para las solicitudes POST... :-(

 49
Author: François P.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-15 14:58:49

Como François mencionó anteriormente, los 240 segundos parecían estar funcionando como describió hasta iOS 6 (incluso en 5.1). Ahora, este tiempo de espera parece tomar el valor predeterminado de 60 segundos como se esperaba (si no lo estableció explícitamente usted mismo), por lo que si tiene una solicitud POST que podría haber dependido del tiempo más largo inadvertidamente, es posible que deba cambiar el timeoutInterval manualmente para usar un valor más alto. He sido capaz de establecer el tiempo de espera por debajo y por encima de 60 segundos para un POST por lo que tampoco parece que la marca de 60 segundos represente una restricción mínima al tiempo de espera para este tipo de solicitud.

 5
Author: brainfree,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-21 17:13:49

Este problema se ha solucionado en iOS5, por lo que no se enfrentará a este problema ahora. Y tu código funcionará perfectamente

 -2
Author: user501836,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-19 09:18:30