2011-01-03 3 views
4

Je souhaite utiliser un fileur. Mais, ce code ci-dessous n'affiche pas un fileur et je ne sais pas pourquoi. Comment faire ce travail? BTW, il est appelé à partir d'un bouton de soumission que j'ai créé.Impossible de faire apparaître un fileur

//spinner declared in .h file 
UIActivityIndicatorView *aSpinner; 

//throw up spinner from submit btn we created 
aSpinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle: 
    UIActivityIndicatorViewStyleWhiteLarge]; 

[self.view addSubview:aSpinner]; 
[aSpinner release]; 
[aSpinner startAnimating]; 

//send blocking request 
[request startSynchronous]; 

//get rid of spinner when finished delegate is fired 
- (void)requestFinished:(ASIHTTPRequest *)request 
{ 
    NSLog(@"REQUEST FINISHED"); 
    [aSpinner stopAnimating]; 
    //[aSpinner release]; 
} 

Répondre

14

Si vous appelez un code de blocage immédiatement après avoir affiché le compteur, l'interface utilisateur ne sera pas mise à jour, car elle ne se met à jour que lorsque la boucle d'exécution principale est en cours d'exécution. Si c'est vraiment la source du problème, le spinner devrait apparaître lorsque vous commentez la ligne [request startSynchronous] pour un test.

La solution consisterait à utiliser une requête asynchrone. Le code de délégation ressemble à ce que vous faites déjà, mais d'autre part, l'appel de démarrage mentionne une opération synchrone. Soin d'expliquer? (Ou ai-je négligé quelque chose?)

3
//spinner declared in .h file 
UIActivityIndicatorView *aSpinner; 

Ajouter une propriété dans le fichier d'en-tête comme puits:

@property (nonatomic, retain) UIActivityIndicatorView *aSpinner; 

Ne pas oublier de faire la synthèse dans le fichier .m!

//throw up spinner from submit btn we created 
UIActivityIndicatorView *tempSpinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 
self.aSpinner = tempSpinner; 
[tempSpinner release]; 

[self.view addSubview:self.aSpinner]; 
[self.aSpinner startAnimating]; 

//send blocking request 
[request startSynchronous]; 


//get rid of spinner when finished delegate is fire 
- (void)requestFinished:(ASIHTTPRequest *)request { 
     NSLog(@"REQUEST FINISHED"); 
     [self.aSpinner stopAnimating]; 
} 

Dans votre méthode dealloc, vous écrivez: [aSpinner release]; Ceci est cependant juste une des nombreuses approches.

+0

Le spinner doit être conservé par l'appel 'addSubview', donc cela ne me semble pas être la source du problème. – zoul

+0

C'est vrai, je vais éditer la réponse. – LuckyLuke

0

Le problème pourrait être dans la vue que vous ajoutez le spinner à. Est-il capable de, et a-t-il les dimensions pour afficher l'indicateur d'activité? (par exemple, UIBarButtonItems ne peut pas gérer addSubview)

Questions connexes