Есть ли какое-либо решение о UIActivityIndicatorView в синхронном процессе? - PullRequest
0 голосов
/ 13 января 2011

В методе я запускаю UIActivityIndicatorView для запуска.а затем используйте NSXMLParser для получения информации об узле из XML с синхронизацией.После окончания разбора я хочу остановить UIActivityIndicatorView.Мое предложение состоит в том, чтобы появилось UIActivityIndicatorView при разборе XML, но это не работает.Есть идеи?Спасибо.

- (void)ButtonTouch{

[activityIndicator startAnimating];
    /*get the login result*/
    loginXMLDealer *loginxmldealer = [[loginXMLDealer alloc] init];
    loginxmldealer.username = usernameField.text;
    loginxmldealer.password = passwordField.text;
    [loginxmldealer loginResult];
    [activityIndicator stopAnimating];
    if ([loginxmldealer.rspCode isEqualToString: @"0001"]) {

        UIAlertView *errorAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Please check your passport." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [errorAlert show];
        [errorAlert release];
    }
    else {
        [self presentModalViewController:self.dataMainController animated:YES]; 

    }
    [loginxmldealer release];
}

1 Ответ

1 голос
/ 13 января 2011

Вы можете сделать что-то вроде этого:

- (void)buttonAction
{
  [activityIndicator startAnimating];
  [self performSelector:@selector(doWork) withObject:nil afterDelay:0.0];
}

- (void)doWork
{
  //Do your xml parsing here...
}

Это дает пользовательскому интерфейсу возможность обновиться, вернув управление в runloop перед блокировкой основного потока.В зависимости от вашей задачи, было бы неплохо использовать фоновый поток или Grand Central Dispatch, чтобы остальная часть пользовательского интерфейса не блокировалась, и вы могли дать пользователю возможность отменить процесс (что невозможно спростой подход выше).

...