Domanda

Sono POST'ing una piccola immagine, quindi mi piacerebbe l'intervallo di timeout per essere breve. Se l'immagine non invia in pochi secondi, è probabilmente mai intenzione di inviare. Per qualche ragione sconosciuta il mio NSURLConnection è mai venendo a mancare, non importa quanto breve ho impostato il 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];

Ho un insieme punto di interruzione su - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error ma non è mai di essere attivato. Le mie immagini continuano ad essere pubblicato bene, che stanno mostrando su Tumblr, nonostante la piccola timeoutInterval.

È stato utile?

Soluzione

Non c'è un thread sul forum di Apple dev parlano di questo problema . A quanto pare su iPhone OS, il setter mandati TimeoutInterval un minimo di 240 secondi (4 minuti). Ciò si verifica solo quando il postBody non è vuota (tipicamente quando si utilizza una richiesta POST). Questo sembra folle, ma a quanto pare è lì per assicurarsi che le richieste di lasciare il sistema anche se potrebbe richiedere molti secondi per l'interfaccia WWAN (3G) a svegliarsi. 240 secondi sembra piuttosto ripida, quindi suggeriscono di impostare un timer e annullare la connessione asincrona quando i timer incendi. So che questo sembra stupido, ma questo è l'unico sono riuscito ad ottenere timeout per le richieste POST ...: - (

Altri suggerimenti

Come François accennato sopra, i 240 secondi sembrava funzionare come ha descritto entro iOS 6 (anche su 5.1). Ora, questo timeout sembra assumere il valore predefinito di 60 secondi come previsto (se non hai impostato in modo esplicito da soli), quindi se avete una richiesta POST che potrebbero aver fatto affidamento sul tempo più lungo inavvertitamente, potrebbe essere necessario il cambiamento la TimeoutInterval manualmente per utilizzare un valore superiore. Sono stato in grado di impostare il timeout sia sotto che sopra di 60 secondi per un posto così non sembra che la seconda soglia dei 60 rappresenta una restrizione minima per il timeout per questo tipo di richiesta sia.

Questo problema è stato risolto in iOS5, In modo da non essere di fronte a questo problema ora. E il codice funziona perfettamente

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top