Frage

Ich bin POST'ing ein kleines Bild, so dass ich das Timeout-Intervall kurz sein möchte. Wenn das Bild in ein paar Sekunden nicht sendet, wird es wahrscheinlich nie senden würde. Aus unbekannten Gründen ist mein NSURLConnection nie versagt, egal wie kurz ich die timeoutInterval gesetzt.

// 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];

Ich habe einen Haltepunkt setzen auf - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error aber es ausgelöst nie werden. Meine Bilder weiterhin ganz gut gebucht werden, sie zeigen trotz der winzigen timeoutInterval bei Tumblr werden.

War es hilfreich?

Lösung

Es gibt einen Thread auf Apple-Entwickler-Foren über dieses Thema . Offenbar auf iPhone OS, das Setter Mandate timeoutInterval ein Minimum von 240 Sekunden (4 Minuten). Dies geschieht nur, wenn der postBody nicht leer ist (in der Regel, wenn eine POST-Anforderung verwendet wird). Dies scheint verrückt, aber anscheinend ist es dort sicher Anfragen das System verlassen zu machen, obwohl es viele Sekunden dauern könnte für die WWAN (3G) Schnittstelle zu wecken. 240 Sekunden scheint ziemlich steil, so dass sie einen Timer einstellen vorschlagen und brechen Sie die asynchrone Verbindung, wenn Sie Ihren Timer ausgelöst wird. Ich weiß, das scheint dumm, aber das ist der einzige schaffte ich es für POST-Anfragen zu erhalten Timeout ...: - (

Andere Tipps

Wie François oben erwähnt, schienen die 240 Sekunden zu arbeiten, wie er bis iOS 6 beschrieben (einschließlich auf 5.1). Nun, das Timeout erscheint auf dem Standardwert von 60 Sekunden dauern als erwartet (wenn Sie nicht explizit festgelegt haben selbst), so dass, wenn Sie eine POST-Anforderung, die versehentlich auf längere Zeit verlassen haben könnte, könnten Sie ändern müssen die timeoutInterval manuell einen höheren Wert zu verwenden. Ich habe in der Lage das Timeout zu setzen sowohl unterhalb als auch oberhalb von 60 Sekunden für eine POST, so dass es scheint nicht, dass die 60-Sekunden-Marke darstellt, auf das Timeout eine minimale Einschränkung für diese Art der Anfrage auch nicht.

Dieses Problem wird in iOS5 festgelegt, so werden Sie nicht dieses Problem jetzt gegenüberstehen. Und Ihr Code funktioniert perfekt

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top