2010-12-07 42 views
0

我想在模態視圖控制器中加載PDF文件。 因爲我不知道該文件的大小的那一刻,我想其裝載到一個單獨的線程,所以:用於加載pdf文件的NSThread

- (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]]; 

不等待,直到完成並將控制權返回給調用者。我該如何解決它?

回答

1

你不能/不應該(已經讓它工作了一次)在一個單獨的線程上更新UI,你應該把它全部放在主體上。因爲我相信webView是一個UIWebView,這可能是原因。

儘管您將webview從隱藏狀態更改爲在主線程中可見,但實際UIWebView的所有更新和創建都不是。

最好的辦法是從URL然後performSelectorOnMainThread創建數據,並將數據傳遞給主線程上的一個方法,該方法用數據更新UIWebview。

+0

工程很好。謝謝。 – IssamTP 2010-12-07 13:36:45

1

實施方法webViewDidFinishLoad:UIWebViewDelegate並在那裏打電話給您的showPDF