NSThread проблема на iPhone - PullRequest
       1

NSThread проблема на iPhone

0 голосов
/ 18 августа 2010

Я впервые использую два потока в приложении для iPhone и столкнулся с проблемой.В этом прототипе у меня есть контроллер представления, который загружает локальную веб-страницу.Я хочу, чтобы индикатор активности отображался до завершения загрузки страницы.С помощью приведенного ниже кода индикатор активности запускается, страница загружается правильно, но индикатор активности не останавливается и не скрывается.Не похоже, что когда-либо вызывается функция «загрузки».

Что я делаю неправильно?

Ответы [ 4 ]

2 голосов
/ 18 августа 2010

Существует более простой способ сделать это без создания собственного потока.

- (void)viewDidLoad {
    [self.view addSubview:activityIndicator];
    [activityIndicator startAnimating];
    [detailWebView setDelegate:self];
    [detailWebView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"page1" ofType:@"html"]isDirectory:NO]]];
    [super viewDidLoad];
}

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    [activityIndicator stopAnimating];
}
1 голос
/ 18 августа 2010

Вы бы хотели остановить индикатор активности в методе делегата веб-просмотра:

-(void)webViewDidFinishLoad:(UIWebView*)webView
0 голосов
/ 18 августа 2010

Вы используете веб-просмотр, который уже предоставляет механизм, чтобы узнать, когда загрузка закончилась, и уже загружает данные асинхронно - использование пользовательского потока действительно не требуется.

Зарегистрируйте ваш объекткак делегат UIWebView.Вызовите loadRequest в UIWebView и начните анимировать индикатор прогресса.Остановите анимацию индикатора прогресса в:

-(void)webViewDidFinishLoad:(UIWebView*)webView

Этот метод определен протоколом UIWebViewDelegate - убедитесь, что ваш объект реализует этот протокол.Вы реализуете этот метод:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    [activityIndicator stopAnimating];
}

http://developer.apple.com/iphone/library/documentation/uikit/reference/UIWebViewDelegate_Protocol/Reference/Reference.html

0 голосов
/ 18 августа 2010

Добавили ли вы отладочный вывод в loading для вызова? Код выглядит так, он должен вызываться через 0,5 секунды, и я предполагаю, что detailWebView все еще загружается.

Кроме того, в главном потоке должен выполняться графический интерфейс, поэтому вам может потребоваться:

- (void)loading {
  if(!detailWebView.loading){
    [activityIndicator performSelectorOnMainThread:@selector(stopAnimating) withObject:nil waitUntilDone:YES];
    [activityIndicator performSelectorOnMainThread:@selector(removeFromSuperView) withObject:nil waitUntilDone:YES];
  }
}
...