1

まず、次のように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 *)errortimeoutInterval(20s)に達したときにデリゲートコールバックメソッドを起動しなかった理由です。代わりに、75年代頃にのみタイムアウトになります。デフォルトの60秒よりもさらに長い...

回線を削除しても[self.requestURL setTimeoutInterval:20];、接続は75秒でタイムアウトします。

私が試してみました

self.requestURL = [[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:requestString] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:20.0] autorelease];

4

4 に答える 4

3

これを試して

NSLog(@"request timeOutInterval:%f", self.requestURL.timeoutInterval);それは私のために働いた。

アップデート

この前のSOの質問で@Francoisによるこの回答を確認してください

この問題について議論しているApple開発フォーラムのスレッドがあります。どうやらiPhoneOSでは、セッターはtimeoutIntervalに最低240秒(4分)を義務付けています。これは、postBodyが空でない場合にのみ発生します(通常、POSTリクエストを使用する場合)。これはおかしなことに思えますが、WWAN(3G)インターフェイスがウェイクアップするのに何秒もかかる場合でも、リクエストがシステムを離れることを確認するためにあるようです。240秒はかなり急なように見えるので、タイマーを設定し、タイマーが起動したときに非同期接続をキャンセルすることをお勧めします。これはばかげているように思えますが、POSTリクエストのタイムアウトを取得できたのはそれだけです...

于 2011-09-15T10:52:35.263 に答える
0

ステートメントは整数を示すフォーマット指定子を使用していますが、NSLogプロパティはdoubleです。%dtimeoutInterval

代わりに使用してみてください%f。これは、double値をログに記録することを示します。

于 2011-09-15T10:51:11.770 に答える
0

を使用して%fNSTimeInterval浮動小数点数です。

Refer Foundation data types ref:
NSTimeInterval
Used to specify a time interval, in seconds.
typedef double NSTimeInterval;
于 2011-09-15T10:51:52.867 に答える
0

それは私のために働きます:

NSLog(@"request timeOutInterval:%@", requestURL.timeoutInterval);
于 2011-09-15T10:56:31.063 に答える