我想在模态视图控制器中加载PDF文件。 从我不知道文件大小的那一刻起,我想在一个单独的线程上加载它,所以:
- (void)viewDidLoad {
[super viewDidLoad];
[[UISharedApplication sharedApplication] setNetworkActivityIndicatorVisibile:YES];
[NSThread detachNewThreadSelector:@selector(loadPDF) toTarget:self withObject:nil];
}
- (void)loadPDF {
NSAutoreleasePool *threadPool = [[NSAutoreleasePool alloc] init];
[self.webView loadRequest:[NSURLRequest requestWithURL:url]];
[threadPool release];
[self performSelectorOnMainThread:@selector(showPDF) withObject:nil waitUntilDone:NO];
}
- (void)showPDF {
[self.webView setHidden:NO];
[self.spinner stopAnimating];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}
该方法在其他文件中起作用相当不错(至少我猜)我在哪里解析一些XML数据,但这里没有。注释:
[self performSelectorOnMainThread:@selector(showPDF) withObject:nil waitUntilDone:NO];
让我看到顶部的微调器和活动指示器。所以我认为:
[self.webView loadRequest:[NSURLRequest requestWithURL:url]];
不会等到完成并将控件返回给调用者。我该如何解决?
答案 0 :(得分:1)
你不能/不应该(已经让它工作一次)在一个单独的线程上更新UI,你应该在主要的所有。我相信webView是一个UIWebView,这可能就是原因。
虽然您在主线程上将webview从隐藏更改为可见,但实际UIWebView的所有更新和创建都不是。
最好的办法是从URL创建数据,然后performSelectorOnMainThread
,并将数据传递给主线程上的方法,该方法用数据更新UIWebview。
答案 1 :(得分:1)
实施webViewDidFinishLoad:
的方法UIWebViewDelegate
并在那里拨打showPDF
。