NSMutableURL Запрос не подчиняется моему тайм-ауту 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
,
3 ответа
На форумах разработчиков Apple есть тема, обсуждающая эту проблему. По-видимому, в iPhone OS установщик предписывает timeoutInterval минимум 240 секунд (4 минуты). Это происходит только тогда, когда postBody не пуст (обычно при использовании запроса POST). Это кажется сумасшедшим, но, очевидно, он предназначен для того, чтобы убедиться, что запросы покидают систему, даже если для активации интерфейса WWAN (3G) может потребоваться много секунд. 240 секунд кажутся довольно крутыми, поэтому они предлагают установить таймер и отменить асинхронное соединение при срабатывании таймера. Я знаю, это кажется глупым, но это единственное, что мне удалось получить тайм-аут для запросов POST...:-(
Как упоминал Франсуа выше, казалось, что 240 секунд работают, как он описал, вплоть до iOS 6 (в том числе на 5.1). Теперь этот тайм-аут, по-видимому, принимает значение по умолчанию, равное 60 секундам, как и ожидалось (если вы сами не установили его явно), поэтому, если у вас есть запрос POST, который мог непреднамеренно полагаться на более длительное время, вам может потребоваться изменить timeoutInterval вручную, чтобы использовать более высокое значение. Мне удалось установить тайм-аут ниже и выше 60 секунд для POST, поэтому не похоже, что 60-секундная метка представляет собой минимальное ограничение времени ожидания для этого типа запроса.
Эта проблема исправлена в iOS5, поэтому вы не столкнетесь с этой проблемой сейчас. И ваш код будет отлично работать