web-dev-qa-db-ja.com

NSMutableURLRequestがtimeoutIntervalに従わない

小さな画像をPOSTしているので、タイムアウト間隔を短くしたいと思います。画像が数秒で送信されない場合、おそらく送信されることはありません。いくつかの不明な理由により、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にブレークポイントを設定しましたが、トリガーされません。私の画像は引き続き問題なく投稿されており、小さなtimeoutIntervalにもかかわらずTumblrに表示されています。

31
kubi

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

49
François P.

フランソワが前述したように、iOS 6(5.1を含む)までは240秒が機能しているようでした。現在、このタイムアウトは予想どおりデフォルト値の60秒を取っているように見えます(自分で明示的に設定しなかった場合)。したがって、POSTリクエストがあり、誤って時間が長くなると、timeoutIntervalを手動で変更して、より高い値を使用する必要がある場合があります。POST 60秒のマークは、このタイプのリクエストのタイムアウトに対する最小の制限を表しているようです。

5
brainfree