2012-09-10 2 views
2

PDF 파일이로드 될 때까지 루프해야하는 UIActivityIndicator가 있습니다.Xcode - UIActivityIndicator가 너무 빨리 사라집니다.

이유를 이해할 수 없지만 PDF가로드되기 전에 표시기가 사라집니다. PDF 파일은 (1,4 MB) 너무 큰 경우 나는

-(void)startTheProcess { 

    act = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
    //coordinate act 
    [act setCenter:CGPointMake(320/2, 440/2)]; 
    self.act.hidden = FALSE; 
    [self.view addSubview:act]; 
    [act startAnimating]; 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = TRUE; 
    [NSThread detachNewThreadSelector:@selector(creaVista) toTarget:self withObject:nil]; 
} 

- (void) creaVista{ 

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    NSURL *url = [NSURL URLWithString:@"http://www.something.com/file.pdf"]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
    [pdfView loadRequest:request]; 
    [pdfView setScalesPageToFit:YES]; 
    [self performSelectorOnMainThread:@selector(processDone) withObject:nil waitUntilDone:NO]; 
    [pool release]; 
} 
-(void)processDone { 

    [act stopAnimating]; 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = FALSE; 
} 

나는 그것을 디버깅, 내가 쉽게 볼 수 있습니다 내가 코드에서 뭔가 잘못 쓴 내 응용 프로그램이 정지하는 경우, 또는 경우에, 이해할 수없는 디버거가 [act stopAnimating]으로 빠르게 이동 한 다음 중지되지만 파일이 아직로드되지 않은 경우 : 몇 초 후에 PDF가 나타납니다.

힌트가 있습니까? 나는 멍청하고 실수를하고 있다고 생각합니다. 감사합니다.

+3

[pdfView loadRequest를 : 요청]'은 비동기식 연산이므로 즉시 반환하고'[act stopAnimating]'을 호출합니다. 또한, 당신은'createVista :'와'processDone :'을 마지막에 호출 할 때 애니메이션을 멈추려 고합니다. – Joshua

+0

죄송합니다, 복사 오류. in creaVista 나는 행동을 멈추지 않는다 ... – Miwi

+0

당신의 pdfView가 뷰 레이어 계층 구조에서 활동 표시기 위에 ​​있습니까? – gdavis

답변

5

의견에 Joshua가 올바른 생각을 가지고있는 것 같습니다. 로드는 비동기 적이며 실제로로드가 완료되기 전에 리턴됩니다.

pdfView이 UIWebView 인 경우 UIWebViewDelegate 메서드 webViewDidFinishLoad:을 사용하면 PDF로드가 언제 완료되는지 알 수 있습니다. 거기에 [act stopAnimating]을 배치하면 제대로 작동합니다.

또한 오류가있는 경우 webView:didFailLoadWithError:에 입력하고 싶을 수도 있습니다.

이 수행 pdfView에 위임을 설정하려면 [pdfView setDelegate:self]; 를하고 컨트롤러가이 같은 UIWebViewDelegate 채택이 있는지 확인하십시오 : 그냥 '여기 추측하지만, 어쩌면있어
@interface ClassName : ItsSuperclass <UIWebViewDelegate>

+0

좋아요! 그것은 완벽하게 작동하고 UIActivityIndicator는 PDF 표시가 나타나기 바로 전에 사라집니다! – Miwi

관련 문제