1

次のコードを見てください。

NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:<...> cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:3.0]; 
<...>
[NSURLConnection sendSynchronousRequest:request returningResponse:&WSresponse error:&WSerror]

次のコードは、バックグラウンド スレッドから呼び出されます。

[self performSelectorInBackground:@selector(<...>) withObject:nil];

sendSynchronousRequest が 3.0 秒をはるかに超えて機能する場合があります。(約1分)。

  1. 動作しない代わりに実際のタイムアウトを設定する方法はtimeoutInterval:3.0?
  2. NSURLConnectionいつでもキャンセルボタンでリクエストの凍結を停止する機能をユーザーに追加するにはどうすればよいですか?

助けてくれてどうもありがとう!

4

2 に答える 2

3
  1. 呼び出したイニシャライザに加えて、NSMutableURLRequest で -setTimoutInterval: を呼び出すこともできます。タイムアウト値は実際に機能しますが、240 未満の値は無視されます。これは、iOS フレームワークが尊重する最小値です。より低いタイムアウト値を設定する場合は、非同期リクエストを使用するしかありません。

  2. リクエストを非同期的にキャンセルする場合 (つまり、リクエストをバックグラウンドで実行し、ユーザーが [キャンセル] または [停止] ボタンを押すと、フォアグラウンド UI スレッドがキャンセルを発行できるようにする場合)、非同期 URL リクエストを作成する必要があります。同期リクエストでそれを行う方法はありません。たとえば、現在ブロックを実行している間は、ディスパッチ キューを強制終了することさえできません。

この機能の一部を少し異なる方法でまとめた ASIHTTPRequest を確認することをお勧めします。

于 2011-08-26T18:52:17.203 に答える
2

タイムアウト間隔は、接続がタイムアウトする前に任意の時点でアイドル状態になることができる時間の長さを示しています。アップルのドキュメントから:

接続の試行中にリクエストがタイムアウト間隔よりも長くアイドル状態のままである場合、リクエストはタイムアウトしたと見なされます。

そのため、データが大量のデータを取得している場合は、さらに時間がかかります。

「リッスンを停止」する前に待機する時間をより詳細に制御したい場合は、非同期リクエストを使用する必要があります。非同期リクエストもそれを行うので、待機中にユーザーがフリーズすることはありませんか?

于 2011-08-26T18:12:07.667 に答える