NSThread用于加载pdf文件

时间:2010-12-07 11:30:11

标签: iphone ipad nsthread

我想在模态视图控制器中加载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]];

不会等到完成并将控件返回给调用者。我该如何解决?

2 个答案:

答案 0 :(得分:1)

你不能/不应该(已经让它工作一次)在一个单独的线程上更新UI,你应该在主要的所有。我相信webView是一个UIWebView,这可能就是原因。

虽然您在主线程上将webview从隐藏更改为可见,但实际UIWebView的所有更新和创建都不是。

最好的办法是从URL创建数据,然后performSelectorOnMainThread,并将数据传递给主线程上的方法,该方法用数据更新UIWebview。

答案 1 :(得分:1)

实施webViewDidFinishLoad:的方法UIWebViewDelegate并在那里拨打showPDF