NSMutableURLRequest не подчиняется моему тайм-аутуInterval

Я получаю небольшое изображение, поэтому мне нужно, чтобы интервал тайм-аута был коротким. Если изображение не отправляется через несколько секунд, оно, вероятно, никогда не отправится. По какой-то неизвестной причине мой NSURLConnection никогда не прерывается, независимо от того, насколько короче я установил 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];

У меня есть точка останова на - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error, но она никогда не запускается. Мои изображения продолжают быть опубликованы просто отлично, они появляются на Tumblr, несмотря на крошечные timeoutInterval.

Ответ 1

Там поток на форумах Apple dev обсуждает эту проблему. По-видимому, на iPhone OS, установщик назначает timeoutInterval минимум 240 секунд (4 минуты). Это происходит только тогда, когда postBody не пуст (обычно при использовании запроса POST). Это кажется сумасшедшим, но, судя по всему, он должен удостовериться, что запросы покидают систему, даже если для интерфейса WWAN (3G) может потребоваться много секунд, чтобы проснуться. 240 секунд кажутся довольно крутыми, поэтому они предлагают установить таймер и отменить асинхронное соединение при срабатывании таймера. Я знаю, что это кажется глупым, но только мне удалось получить тайм-аут для запросов POST...: - (

Ответ 2

Как упоминал Франсуа, 240 секунд, казалось, работали, как он описывал до iOS 6 (включая 5.1). Теперь этот тайм-аут, по-видимому, принимает значение по умолчанию 60 секунд, как и ожидалось (если вы явно не установили его самостоятельно), поэтому, если у вас есть запрос POST, который мог бы полагаться на более длительное время непреднамеренно, вам может потребоваться изменить timeoutInterval вручную, чтобы использовать более высокое значение. Я смог установить тайм-аут как ниже, так и выше 60 секунд для POST, поэтому не отображается, что 60-секундная метка представляет минимальное ограничение на таймаут для этого типа запроса.

Ответ 3

Эта проблема исправлена ​​в iOS5, поэтому теперь вы не столкнетесь с этой проблемой. И ваш код будет работать отлично