1

iOS での nsurlconnection に関する議論を認識しており、タイムアウトには最低 240 秒あることを認識しています。私の質問は、NSURLConnection の + (NSData *)sendSynchronousRequest:(NSURLRequest )request returnedResponse:(NSURLResponse * )response error:(NSError **)error を介して同期呼び出しを送信している場合、これをキャンセルできる可能性はありますか? 240秒切れた?おそらくタイマーを設定してこの同期リクエストをキャンセルすることを考えていますが、それが可能かどうかさえわかりませんか? 考えている:

[self performSelector:@selector(cancelRequest:) withObject:myRequest afterDelay:myTimeOut];

どういうわけかリクエストがリリースされた場合、これは災害につながると感じていますが、それを判断する方法はありません. 考え?誰かがこれをやろうとしましたか?これは同期呼び出しです。

4

3 に答える 3

6

キャンセルはできません。単にそれを使用せず、代わりに非同期呼び出しを使用してください。簡単にキャンセルできるもの。

于 2011-03-01T23:16:57.267 に答える
6

これは私にとってはうまくいくようでした:

NSURL *url = [NSURL URLWithString:@"http://someurl.com"];
NSURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:5];
NSHTTPURLResponse *response = nil;
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:NULL];
if (response == nil) {
    // timed out or failed
} else {
    // all good
}

もちろん、タイムアウト間隔をタイムアウト前にメインスレッドをブロックする時間に設定します-上記のコードは5秒後に正常にタイムアウトしました

iOS6 & iOS5.1でテスト済み

于 2013-01-10T01:49:34.950 に答える
1
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url    cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10.0];

webData = (NSMutableData *)[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];

if (webData==nil) {
        [self displayAlert:@"Time Out" message:@"Request Timed Out"];
    }

正確に 10 秒でタイムアウトします。

于 2013-07-19T19:00:06.353 に答える