2011-01-13 2 views
0

Dans une méthode, je démarre le UIActivityIndicatorView pour démarrer. puis utilisez NSXMLParser pour obtenir les informations de noeud du fichier XML avec synchronisation. Après l'analyse terminée, je veux arrêter le UIActivityIndicatorView. Ma proposition est d'apparaître le UIActivityIndicatorView lors de l'analyse du XML, mais cela ne fonctionne pas. Des idées? Merci.Y at-il une solution à propos de UIActivityIndicatorView dans le processus synchrone?

- (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]; 
} 
+0

Montrez-nous le code que vous avez déjà. Ensuite, nous pouvons vous aider à comprendre ce que vous devez faire/modifier/ajouter/supprimer. –

+0

ok.J'ai déjà éditer ma question.Merci. – Solskjaer

Répondre

1

Vous pouvez faire quelque chose comme ceci:

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

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

Cela donne à l'interface utilisateur la possibilité de mettre à jour en retournant le contrôle à la runloop avant de bloquer le thread principal. En fonction de votre tâche, il peut être judicieux d'utiliser un thread d'arrière-plan ou Grand Central Dispatch à la place, de sorte que le reste de l'interface utilisateur ne bloque pas et vous pouvez donner à un utilisateur la possibilité d'annuler le processus. l'approche simple ci-dessus).

+0

Pour que l'animation fonctionne, vous devez effectuer le traitement dans un thread d'arrière-plan ou un GCD. Ce code le laissera apparaître, mais il ne s'animera pas. – ughoavgfhw

+0

Il s'anime, car UIActivityIndicator utilise lui-même un thread d'arrière-plan pour l'animation. – omz

Questions connexes