阻塞主线程,直到UIWebView完成加载

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

为什么发生这种情况? 以及如何阻止主线程?
我从[ViewController willRotateToInterfaceOrientation:]调用loadPage ,我想要做的是防止iOS界面旋转,直到与其他方向的[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!"); } 

我想你正在试图解决错误的问题。

你不想阻塞主线程。 首先,整个用户界面是在主线程上绘制的,所以看起来好像你的应用程序已经挂起。 其次,一个UIWebView是UI的一部分(这可能是为什么你所做的不工作)。

那么该怎么办?

看看下面的方法:

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 

当你开始加载你的页面,你可以从这个方法返回NO 。 加载完成后,您可以正常返回值。 UIWebView有一个委托,告诉你的状态。

看看NSURLRequest的类引用,那里有一个同步方法。

 + (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error