NSMutableURLRequest setTimeoutInterval проблема
Хорошо, во-первых, если я использую 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 не устанавливается.
self.requestURL = [[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:requestString]] autorelease];
[self.requestURL setTimeoutInterval:20];
NSLog(@"request timeOutInterval:%i", self.requestURL.timeoutInterval); // same thing always 0 here.
РЕДАКТИРОВАТЬ. Я использую%f для регистрации свойства timeoutInterval сейчас, и оба читают 20.000. Но настоящая проблема заключается в том, почему мой NSMutableURLRequest не запускал - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
делегировать метод обратного вызова, когда он достигает timeoutInterval(20 с). Вместо этого он рассчитан только на 75-е. Даже дольше, чем по умолчанию 60-х годов...
Даже если я удалю [self.requestURL setTimeoutInterval:20];
линия, тайм-аут соединения по-прежнему на 75 с.
я пытался
self.requestURL = [[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:requestString] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:20.0] autorelease];
4 ответа
Попробуй это
NSLog(@"request timeOutInterval:%f", self.requestURL.timeoutInterval);
Это сработало для меня.
ОБНОВИТЬ
Проверьте этот ответ @Francois в этом предыдущем вопросе SO
На форумах разработчиков Apple есть тема, обсуждающая эту проблему. По-видимому, в iPhone OS установщик предписывает timeoutInterval минимум 240 секунд (4 минуты). Это происходит только тогда, когда postBody не пуст (обычно при использовании запроса POST). Это кажется сумасшедшим, но, очевидно, он предназначен для того, чтобы убедиться, что запросы покидают систему, даже если для активации интерфейса WWAN (3G) может потребоваться много секунд. 240 секунд кажутся довольно крутыми, поэтому они предлагают установить таймер и отменить асинхронное соединение при срабатывании таймера. Я знаю, что это кажется глупым, но это единственное, что мне удалось получить тайм-аут для запросов POST...
Это работает для меня:
NSLog(@"request timeOutInterval:%@", requestURL.timeoutInterval);
Использование %f
, NSTimeInterval
это число с плавающей запятой.
Refer Foundation data types ref:
NSTimeInterval
Used to specify a time interval, in seconds.
typedef double NSTimeInterval;
Ваш NSLog
заявление использует %d
спецификатор формата, который указывает целое число, но timeoutInterval
свойство двойное.
Попробуйте использовать %f
вместо этого, который указывает, что вы хотите записать двойное значение.