2

PDFファイルがロードされるまでループするUIActivityIndi​​catorがあります。

理由はわかりませんが、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が表示されます。

ヒントはありますか?私は初心者で、愚かな間違いをしていると思います...ありがとう

4

1 に答える 1

5

ジョシュアはコメントで正しい考えを持っているようです。ロードは非同期であり、ロードが実際に行われる前に戻ります。

pdfViewUIWebViewの場合は、このメソッドを使用して、UIWebViewDelegatePDFwebViewDidFinishLoad:の読み込みがいつ完了したかを知ることができます。あなた[act stopAnimating]がそこにあなたを置くならば、それはうまくいくはずです。

またwebView:didFailLoadWithError:、エラーが発生した場合に備えて配置することもできます。

デリゲートを設定するには、次のようにしpdfViewます。コントローラーに次のようなもの[pdfView setDelegate:self]; を採用させていることを確認します。UIWebViewDelegate
@interface ClassName : ItsSuperclass < UIWebViewDelegate >

于 2012-09-10T14:36:26.267 に答える