2010-02-12 3 views
0

J'ai une méthode qui est ici dans mon code:Pourquoi ma méthode ne fonctionne-t-elle pas complètement? (IPhone SDK)

-(IBAction) actionButtonPressed: (id) sender{ 
    NSLog(@"%@",actionButton.titleLabel.text); 
    if (actionButton.titleLabel.text == @"Begin Recording"){ 
     [actionButton setTitle:@"Finish Recording" forState:UIControlStateNormal]; 
     [actionButton setTitle:@"Finish Recording" forState:UIControlStateApplication]; 
     [actionButton setTitle:@"Finish Recording" forState:UIControlStateHighlighted]; 
     [actionButton setTitle:@"Finish Recording" forState:UIControlStateReserved]; 
     [actionButton setTitle:@"Finish Recording" forState:UIControlStateSelected]; 
     [actionButton setTitle:@"Finish Recording" forState:UIControlStateDisabled]; 
     UIImage *redButton = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"bigredbutton" ofType:@"png"]]; 
     [actionButton setBackgroundImage:redButton forState:UIControlStateNormal]; 
     [actionButton setBackgroundImage:redButton forState:UIControlStateApplication]; 
     [actionButton setBackgroundImage:redButton forState:UIControlStateHighlighted]; 
     [actionButton setBackgroundImage:redButton forState:UIControlStateReserved]; 
     [actionButton setBackgroundImage:redButton forState:UIControlStateSelected]; 
     [actionButton setBackgroundImage:redButton forState:UIControlStateDisabled]; 
    } 
    if (actionButton.titleLabel.text == @"Finish Recording"){ 
     [self dismissModalViewControllerAnimated:YES]; 
    } 

} 

Pour une raison quelconque l'appel NSLog fonctionne et affiche sur la console. Le bouton commence à lire l'enregistrement de début, mais en appuyant dessus, il ne fait rien, même si elle est liée à Touch Up Inside dans Interface Builder pour appeler cette méthode et est référencée.

Répondre

3

Votre problème est cette ligne:

if (actionButton.titleLabel.text == @"Begin Recording"){ 

Il vous comparez des pointeurs, et non des chaînes. Vous avez besoin de:

if ([actionButton.titleLabel.text isEqualToString:@"Begin Recording"]){ 
+1

C'est pour la plupart correct, mais je pense que vous devriez utiliser isEqualToString, pas isEqual. Pour développer un peu ce que Dave a dit, l'opérateur == n'évaluera que true lors de la comparaison de chaînes constantes, et il est encore mal formulé de l'utiliser de cette façon. Utilisez isEqualToString pour toutes les comparaisons de chaînes. –

+0

@Andrew - assez juste. Réponse éditée (Bien que je n'ai jamais eu de problème avec l'utilisation de 'isEqual:') –

+0

Ouais, je pensais que ça marcherait parce que c'est ce que vous disiez, mais je ne l'ai jamais utilisé auparavant ... Je me demande s'il y en a différence. –

Questions connexes