2

UIWebView の読み込みが完了するまでメイン スレッドをブロックしようとしていますが、呼び出し[NSThread sleepForTimeInterval:]後に呼び出す[UIWebView loadRequest:]と、読み込みが完了しません。webViewDidFinishLoadデリゲートは、スリープが終了した後に呼び出されます。

なぜこうなった?メインスレッドをブロックするにはどうすればよいですか? から
呼び出しています。私がやろうとしているのは、他の向きの webview が読み込まれるまで、iOS インターフェイスが回転しないようにすることです。loadPage[ViewController willRotateToInterfaceOrientation:]

- (void)loadPage {
    UIWebView* webview2 = [[UIWebView alloc] initWithFrame:rect];
    webview2.delegate = self;

    NSString* htmlPath = ..... ; // Path to local html file
    NSURL *newURL = [[[NSURL alloc] initFileURLWithPath: htmlPath] autorelease];
    NSURLRequest *newURLRequest = [[[NSURLRequest alloc] initWithURL: newURL] autorelease];

    [webview2 loadRequest:newURLRequest];
    [NSThread sleepForTimeInterval:10.0f]; // Why this blocks the uiwebview thread ??
    [self.view addSubview:webview2];
}

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    NSLog(@"Finished loading!");
}
4

2 に答える 2

1

あなたは間違った問題を解決しようとしていると思います。

メインスレッドをブロックしたくありません。まず、UI 全体がメイン スレッドで描画されるため、アプリがハングしたように見えます。第二に、UIWebView は UI の一部です (これがおそらく、実行していることが機能しない理由です)。

じゃあ何をすればいいの?

次の方法を見てください。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

NOページの読み込みを開始すると、このメソッドから戻ることができます。ロードが完了すると、通常どおり値を返すことができます。UIWebViewステータスを伝えるデリゲートがあります。

于 2012-05-07T15:30:08.813 に答える
0

NSURLRequestのクラス参照を見てください。そこには sync メソッドがあります。

+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error
于 2012-05-07T15:25:56.130 に答える