NSThread для загрузки pdf файлов - PullRequest
0 голосов
/ 07 декабря 2010

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

1 голос
/ 07 декабря 2010

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

1 голос
/ 07 декабря 2010

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

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

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

...