2

私の状況はこれです:

  • UIWebViewホスト名がユーザーによって提供された URL に POST 要求を行う があります。
  • ホスト名が存在しない場合、ユーザーに設定を確認するように警告できるように、タイムアウトする必要があります。

何が起こっている:

私は次のようなリクエストをします。

NSString *theURL = [NSString stringWithFormat:@"https://%@%@", _hostname, LOGIN_PART_URL];
NSString *body = [NSString stringWithFormat:@"Username=%@&Password=%@", _username, _password];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:[NSURL URLWithString:theURL] 
                                                           cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                       timeoutInterval:_timeoutInSecs];



[request setHTTPMethod: @"POST"];
[request setHTTPBody: [body dataUsingEncoding: NSUTF8StringEncoding]];

[web loadRequest:request];

ホスト名がネットワーク上に存在しない場合、タイムアウト応答がありません。

のデリゲート メソッドをすべて実装しUIWebViewDelegateました。存在しないホスト名を使用すると、次のメソッドが順番に呼び出されます。

  1. webView: shouldStartLoadWithRequest: navigationType:
    • (テストでは常に true を返します)
  2. webViewDidStartLoad

それだけです-その後は何もありません。

が呼び出されたことに驚いていwebViewDidStartLoadます。これは、URL が見つかり、そこからデータを取得できると考えていることを示唆しているからです。しかし、URL が存在しないため、できません。

ここで何か間違ったことをしていますか?

NSTimerを使用して、タイムアウト期間内に応答が受信されたかどうかを確認する回避策を実装する予定です。ただし、リクエストのキャンセルに問題がありますUIWebViewが、それは次のSOの質問のトピックです!

だから私の質問:

  1. webViewDidStartLoadが無効な URL で呼び出されるのは正しいですか?
  2. リクエストをセットアップした方法で、リクエスト タイムアウト エラーが返されるのを見る必要がありますか?

前もって感謝します!!

ストレッチ:)

4

1 に答える 1

2

デリゲート メソッドを使用する

webView:didFailLoadWithError:

そこからエラーを取得します。エラーコードが

-1000 - Bad Url
-1001 - Request timed out
-1003 - Cannot find host
-1004 - Cannot connect to host
-1005 - Network connection lost
-1006 - NSLookupFailed

これをチェックすることで、ユーザーにエラーについて警告することができます。

于 2012-05-17T04:42:17.427 に答える