2011-02-26 3 views
3

Quelqu'un sait pourquoi je reçois cette erreur?Sélecteur non reconnu envoyé à l'instance

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[CustomRaisedTabViewController cancel:]: unrecognized selector sent to instance 0x4d321e0' 

C'est le code où il échoue. C'est dans mon CustomTabViewController. L'erreur se produit lorsque je clique sur le bouton "Annuler".

-(IBAction)showPostModalViewController { 

PostActionModalViewController *addController = [[PostActionModalViewController alloc] 
               initWithNibName:@"PostActionModalView" bundle:nil]; 

// Configure the PostAddViewController. In this case, it reports any 
// changes to a custom delegate object. 

addController.delegate = self; 



// Create the navigation controller and present it modally. 

UINavigationController *navigationController = [[UINavigationController alloc] 
               initWithRootViewController:addController]; 

[self presentModalViewController:navigationController animated:YES]; 

UIBarButtonItem *cancelButton = 
[[UIBarButtonItem alloc] initWithTitle: @"Cancel" 
           style: UIBarButtonItemStylePlain 
           target: self 
           action: @selector(cancel:)]; 
addController.navigationItem.rightBarButtonItem = cancelButton; 
[cancelButton release]; 


//[self presentModalViewController:addController animated:true]; 
[navigationController release]; 

[addController release]; 
} 

-(IBAction)cancel { 
    [self.parentViewController dismissModalViewControllerAnimated:YES]; 
} 
+1

Vous essayez d'appeler un sélecteur qui a un argument, alors que votre méthode actuelle ne dispose pas d'un argument. Supprimez simplement le deux-points après 'cancel:' dans votre @ selector et cela devrait fonctionner correctement. Alternativement, vous pouvez modifier votre action 'cancel' comme indiqué ci-dessous. –

Répondre

9

Parce que la méthode cancel: n'est pas cancel qui est ce que vous avez défini.

Changer votre cancel action pour ressembler à ceci:

- (IBAction)cancel:(id)sender { 
    ... 
} 
+0

Je suis un noob ... Quand j'annule ... il saura fermer/détruire à la fois l'addController et le navigationController – jdog

+0

Aucune garantie que cela se produira tout de suite. Mais en supposant que vous suiviez les règles de gestion de la mémoire, à un moment donné, quand le système le jugera bon, bien sûr. – jer

+1

N'aurait-il pas été plus simple de supprimer le deux-points de la directive '@ selector'? La méthode 'cancel' de l'OP ignorerait l'argument de toute façon, alors pourquoi le passer? – jlehr

0

vous devez modifier la signature de méthode annuler dans

-(IBAction)cancel:(id)sender 
{ 
    [self.parentViewController dismissModalViewControllerAnimated:YES]; 
} 

lorsque vous avez ajouté l'action à votre cancelButton (pendant l'initialisation) que vous avez spécifié le sélecteur "cancel:", cela signifie qu'il sera appelé une méthode ayant un paramètre (le bouton expéditeur)

1
action: @selector(cancel:) 

Pour le sélecteur d'action qui prend en paramètre! cancel: cela signifie qui prendra un autre paramètre.

changer votre méthode pour

-(IBAction)cancel:(id)sender{ 
// Do wat you want 
} 

or 

-(IBAction)cancel:(UIButton *)btnSender{ 
/// Do what you want 
} 
Questions connexes