2010-07-07 6 views
2

Mon application a un bouton lorsque l'utilisateur clique dessus, il est désactivé, un indicateur d'activité est affiché et une tâche d'arrière-plan est exécutée. Lorsque cette tâche est terminée, un rappel met à jour l'interface en activant le bouton et en supprimant l'indicateur d'activité. Le problème que je rencontre est que la tâche consistant à terminer la fonction de rappel est exécutée mais pendant un certain temps, le moniteur d'activité reste sur l'écran, le bouton semble être désactivé mais il est possible de cliquer à nouveau dessus. Quelqu'un peut-il me dire où je vais mal?iPhone UIView pas mise à jour instantanément

Merci beaucoup!

+0

Pouvez-vous poster des codes? – taskinoor

+0

Je vais essayer d'extraire du code cela fait partie d'une application dont nous avons hérité dans une certaine mesure. Un rapide résumé de ce qu'il fait bien. L'action du bouton pousse une NSInvocationOperation sur une NSOperationQueue a lorsque la méthode est exécutée, elle assemble des fichiers audio et la dernière chose à faire est le rappel de la classe UIViewController qui définit la propriété enabled sur 'YES' sur le bouton button et appelle 'stopAnimating 'sur l'indicateur d'activité. Merci encore. – Sjblack

Répondre

2

Se pourrait-il que la méthode de rappel soit exécutée dans un thread distinct? Je demande, parce que tous les appels qui ont un impact sur une vue doivent être effectuées sur le thread principal.

Le problème peut être résolu en procédant comme suit:

  1. créer une méthode qui gère votre code lié à l'interface utilisateur et est appelé au sein de votre méthode de rappel
  2. le code lié à l'interface utilisateur-doit être effectuée sur le fil conducteur

Il pourrait regarder un peu comme ceci:

//gets called asynchronously when your operation has completed 
-(void)myCallbackHandler { 
    [self performSelectorOnMainThread:@selector(updateUI) withObject:nil 
                 waitUntilDone:NO]; 
} 

-(void)updateUI { 
    [myActivityIndicatorView stopAnimating]; 
    [myButton setEnabled:YES]; 
} 
+0

Hey Sam, Cela m'est apparu il y a quelques minutes. Merci beaucoup pour la réponse a confirmé ce que je pensais. Salutations Sj – Sjblack

+0

de rien! – samsam