0

URLをロードするのにかかる時間を見つける方法はありますUIWebViewか?

実際、私の問題は、URLの読み込みに10分以上かかる場合にタイムアウトエラーを表示することです。

実際、私は最初のURLをロードするために少しのコードを使用しましたが、最初にロードするURLは別のURLにリダイレクトされるため、ロードに時間がかかりすぎます。

これは、最初のURLをロードするために使用したコードです。

  NSURL *url = [NSURL URLWithString:urlAddress];
  NSURLRequest *requestObj=[NSURLRequest requestWithURL:url cachePolicy:NSURLCacheStorageNotAllowed timeoutInterval:10];
  [webView loadRequest:requestObj];

リダイレクトURLの読み込みにかかる時間を見つけるにはどうすればよいですか?

4

3 に答える 3

1

これを試して:

 @interface Foo: NSObject <UIWebViewDelegate> {
        NSDate *startDate;
    }

    // etc. In the implementation:
    NSURL *url = [NSURL URLWithString:urlAddress];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url cachePolicy:NSURLCacheStorageNotAllowed timeoutInterval:10];
    webView.delegate = self;
    [webView loadRequest:requestObj];
    startDate = [[NSDate date] retain];

    - (void)webViewDidFinishLoading:(UIWebView *)webView
    {
        NSTimeInterval loadTimeInSeconds = [[NSDate date] timeIntervalSinceDate:startDate];
        // do what you want to it
    }
于 2012-07-28T08:19:30.520 に答える
1

..を呼び出すとすぐにタイマーを開始し、[webView loadRequest:requestObj];– のデリゲート メソッドの実装でそのタイマーを停止できます。webViewDidFinishLoad: また、タイムアウト間隔は分単位ではなく秒単位です....

ただし、特定の時間のトラフィックに基づいてサーバーが応答する速度に依存するため、所要時間は常に一定ではないため、これを行うべきではないと思います...

そのため、読み込みが 3 秒で完了するか、3 分かかる場合もあります。したがって、私のアドバイスは、タイムアウト間隔を長くすることですが、ネットワーク接続インジケーターも表示することです。これが役立つことを願っています。

于 2012-07-28T08:21:50.407 に答える
1

あなたはこのようにすることができます

  double timeOutTime = 60*10; //10 mins
  NSURL *url = [NSURL URLWithString:urlAddress];
  NSURLRequest *requestObj=[NSURLRequest requestWithURL:url cachePolicy:NSURLCacheStorageNotAllowed timeoutInterval:10];
  [self performSelector:@selector(timeOutMethod) withObject:nil afterDelay:timeOutTime];
  [webView loadRequest:requestObj];


- (void)timeOutMethod {
    ///do what ever you want to do
   }

このメソッドでは、上記のリクエストをキャンセルできます

- (void)webViewDidFinishLoading:(UIWebView *)webView {
        // This will cancel the previous request.
        [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(timeOutMethod) object:nil];
  }
于 2012-07-28T08:23:54.260 に答える