NSMutableURLRequest setTimeoutInterval проблема - PullRequest
1 голос
/ 15 сентября 2011

Хорошо, во-первых, если я использую NSURLReuqest (не изменяемый), как показано ниже, то время ожидания соединения будет соответствовать установленному.Странная вещь в том, почему NSLog всегда читает 0?

self.requestURL = [NSURLRequest requestWithURL:[NSURL URLWithString:requestString]cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:20.0];
NSLog(@"request timeOutInterval:%d", self.requestURL.timeoutInterval); // always 0

Затем я делаю что-то вроде этого, и timeoutInterval не устанавливается.Я использую% f для регистрации свойства timeoutInterval сейчас, и оба читают 20.000.Но настоящая проблема заключается в том, почему мой NSMutableURLRequest не запустил метод обратного вызова делегата - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error, когда он достигает timeoutInterval (20 с).Вместо этого это только время около 75-х годов.Даже дольше, чем по умолчанию 60 с ...

Даже если я удаляю строку [self.requestURL setTimeoutInterval:20];, тайм-аут соединения по-прежнему составляет 75 с.*

Ответы [ 4 ]

3 голосов
/ 15 сентября 2011

Попробуйте это

NSLog(@"request timeOutInterval:%f", self.requestURL.timeoutInterval); Это сработало для меня.

UPDATE

Проверьте этот ответ @Francois в предыдущем ТАК вопрос

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

0 голосов
/ 15 сентября 2011

у меня это работает:

NSLog(@"request timeOutInterval:%@", requestURL.timeoutInterval);
0 голосов
/ 15 сентября 2011

Использование %f, NSTimeInterval - число с плавающей запятой.

Refer Foundation data types ref:
NSTimeInterval
Used to specify a time interval, in seconds.
typedef double NSTimeInterval;
0 голосов
/ 15 сентября 2011

Ваш оператор NSLog использует спецификатор формата %d, который указывает целое число, но свойство timeoutInterval является двойным.

Попробуйте вместо этого использовать %f, что означает, что вы хотите войтидвойное значение.

...