2

我试图阻止主线程,直到 UIWebView 完成加载,但在调用[NSThread sleepForTimeInterval:]后调用[UIWebView loadRequest:]会使加载永远不会完成:webViewDidFinishLoad在睡眠完成后调用委托。

为什么会这样?以及如何阻止主线程?
loadPage从打电话[ViewController willRotateToInterfaceOrientation:],我想做的是防止 iOS 界面旋转,直到加载了另一个方向的 webview。

- (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的类参考,那里有一个同步方法。

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