2009-12-30 7 views
0

J'essaie d'agir sur n'importe quel bouton est appuyé sur une alerte. J'ai le code suivant et le premier pop d'alerte est en place mais il n'atteint jamais le second.UIAlertView Question

Je l'ai configuré pour que le protocole UIAlertViewProtocol soit également défini dans l'en-tête.

-(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex 
{ 
    if(buttonIndex != [actionSheet cancelButtonIndex]) 
    { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Something actually happened" message:@"Something was done" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:@"test",nil]; 
     [alert show]; 

    } 

} 

    -(void)alert:(UIAlertView *)alert clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    if(buttonIndex ==0) 
    { 
     NSLog(@"tetetete"); 
     UIAlertView *a = [[UIAlertView alloc] initWithTitle:@"test" message:@"test" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [a show]; 
     [a release]; 
     [alert release];  
    } 

} 

Répondre

1

L'explication la plus simple est que le délégué n'est pas correctement. Définissez le débogueur sur if(buttonIndex ==0) pour vous assurer que la méthode déléguée est appelée. Alternativement, l'index des boutons pourrait ne pas être zéro, donc la deuxième alerte n'est jamais créée. Le débogueur peut également vérifier cela.

Vous devez déplacer la ligne ...

[libération d'alerte];

... à la première méthode.

Je n'ai jamais essayé de faire des alertes de chaîne comme ça. C'est théoriquement possible puisque les alertes sont modales et attachées à la fenêtre et non à la vue de dessus, que vous ne pouvez pas ajouter une seconde alerte tant que la première n'a pas été complètement supprimée de la fenêtre. Si la fenêtre libère simplement l'alerte, elle peut persister dans une propriété de la fenêtre si l'objet d'origine ne l'a pas encore libéré. Le fait de conserver la vue jusqu'à ce que la deuxième vue soit affichée peut provoquer une collision quelconque dans l'objet window.

1

J'ai modifié votre code le vérifier

-(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex 
{ 
    if(buttonIndex != [actionSheet cancelButtonIndex]) 
    { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Something actually happened" message:@"Something was done" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:@"test",nil]; 
     [alert show]; 
     [alert release]; 

    } 

} 

    -(void)alert:(UIAlertView *)alert clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    if(buttonIndex ==0) 
    { 
     NSLog(@"tetetete"); 
     UIAlertView *a = [[UIAlertView alloc] initWithTitle:@"test" message:@"test" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [a show]; 
     [a release]; 
     [a release];  
    } 

}