0

これが私のコードです:

//login method
- (int) authenticateClient {
NSString *loginWeb = [NSString stringWithFormat:(@"http://192.168.118.1/login.php?uname=%@&pass=%@&submit=Log%%20In"), user, pass];
NSURL *login = [NSURL URLWithString:loginWeb];
NSData *loginData = [NSData dataWithContentsOfURL: login];
NSString *result = [[NSString alloc] initWithData:loginData encoding:NSUTF8StringEncoding];
NSMutableURLRequest *loginRequest = [[NSMutableURLRequest alloc] init];
[loginRequest setURL:login];
[loginRequest setTimeoutInterval:1];

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:loginRequest delegate:self startImmediately:YES];
[connection start];
   return [result integerValue];
}

私の質問は、ネットワーク接続がないことをシミュレートするときに、アプリがフリーズし、指定された間隔 (動作するかどうかを確認するためだけに 1 秒) でロードまたはタイムアウトしないことです。

私は、アクションが完了するまで他のすべてを「一時停止」させ、現在の脅威を実行するためにすぐに強制的に開始することについて何かを読みました。

2 つの質問があります。

1.) すべてを一時停止するのではなく、基本的に URL をバックグラウンドで実行するためのより良い方法は何ですか?

2.) 実際に機能するタイムアウト メソッドを取得するにはどうすればよいですか?

大感謝!ありがとう!

4

1 に答える 1

0

まあ、タイムアウトは本当に短いので1秒です。さまざまなネットワーク条件をシミュレートしたい場合は、このようなものを使用できます。あなたはこのダンスをする必要はありません:

NSData *loginData = [NSData dataWithContentsOfURL: login];
NSString *result = [[NSString alloc] initWithData:loginData encoding:NSUTF8StringEncoding];

接続はすでに開始されているため、これも必要ありません。

[connection start];

また、ドキュメントから:

NSURLConnection のデリゲート メソッド (NSURLConnectionDelegate プロトコル プロトコルによって定義される) を使用すると、オブジェクトは、URL 要求の非同期ロードに関する情報コールバックを受け取ることができます。他のデリゲート メソッドは、デリゲートが非同期 URL ロードを実行するプロセスをカスタマイズできるようにする機能を提供します。これらのデリゲート メソッドは、関連する NSURLConnection オブジェクトの非同期ロード操作を開始したスレッドで呼び出されます。

だからあなたの質問のために:

  • NSURLConnection’sデリゲートを実装する
  • これこれをチェックしてください。
于 2012-11-12T08:48:32.880 に答える