我试图阻止主线程直到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!");
}
答案 0 :(得分:1)
我认为你正试图解决错误的问题。
您不想阻止主线程。首先,整个UI都是在主线程上绘制的,因此它看起来好像你的应用程序已挂起。其次,UIWebView是UI的一部分(这可能就是你正在做的事情不起作用的原因)。
那么,该怎么办?
看看以下方法:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
当您开始加载页面时,您可以从此方法返回NO
。加载完成后,您可以正常返回值。 UIWebView
有一个代表,告诉您状态。
答案 1 :(得分:0)
查看NSURLRequest的类引用,其中有一个同步方法。
+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error