NSThread для загрузки файлов PDF

Я хочу загрузить файл 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]];

не ждет завершения и возвращает управление вызывающей стороне. Как я могу это исправить?


person IssamTP    schedule 07.12.2010    source источник


Ответы (2)


Вы не можете/не должны (заставили его работать один раз) обновлять пользовательский интерфейс в отдельном потоке, вы должны делать это все в основном. Поскольку я считаю, что webView - это UIWebView, вероятно, причина в этом.

Хотя вы меняете веб-просмотр со скрытого на видимый в основном потоке, все обновления и создание фактического UIWebView не выполняются.

Лучше всего создать данные из URL-адреса, затем performSelectorOnMainThread и передать данные методу в основном потоке, который обновляет UIWebview данными.

person Rudiger    schedule 07.12.2010

Реализуйте метод webViewDidFinishLoad: из UIWebViewDelegate и вызовите туда свой showPDF.

person Dominik Seibold    schedule 07.12.2010