2009-08-31 2 views
3

Je vais arracher mes cheveux ici. J'ai lu beaucoup d'exemples qui décrivent comment contourner cela mais aucun m'a aidé à me débarrasser du problème. Avoir un simple bouton sur un UIView lié à un IBAction.NSInvalidArgumentException

code est ce ...

Contact.h

#import <UIKit/UIKit.h> 

@interface Contact : UIViewController { 
} 

-(IBAction)buttonPressed:(id)sender; 

@end 

Contact.m

#import "Contact.h" 

@implementation Contact 

- (IBAction)buttonPressed:(id)sender 
{ 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Button Pressed" message:@"You pressed the button" delegate:nil cancelButtonTitle:@"Yep, I did." otherButtonTitles:nil]; 
    [alert show]; 
    [alert release]; 
} 

reçoit constamment ce message d'erreur:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UIViewController buttonPressed:]: unrecognized selector sent to instance 0xd1d5f0' 

Touch Up Inside est lié au fichier Le propriétaire utilise buttonPressed.

Avez-téléchargé d'autres exemples de code et ils fonctionnent bien. Mon projet et ma plume sont configurés de manière identique à l'autre exemple de code.

Je n'ai pas la moindre idée de l'endroit où commencer à essayer de le déboguer.

Quelqu'un a-t-il besoin d'aide?

+0

À quoi ressemble le code pour établir le rappel d'événement TouchUp? – fbrereto

Répondre

5

J'ai eu ce même problème. C'est parce que votre ViewController était sous un TabBarController et dans le View Controller, vous avez défini le NIB Name sur Contact, mais n'avez pas défini la classe sur Contact dans le volet d'identité.

+1

oui, c'était ça :) –

+0

Même problème. J'aimerais pouvoir voter plus. – Dave

0

Etes-vous sûr d'avoir collé le bon code? Votre Contact.m doit contenir un bloc @implementation contenant la mise en œuvre, et non pas un bloc contenant les définitions @interface

Contact.m:

#import "Contact.h" 

@implementation Contact 

- (IBAction)buttonPressed:(id)sender 
{ 
    NSLog(@"buttonPressed"); 
} 

@end 
+0

oups, vous avez raison.Je l'ai maintenant collé comme il aurait dû :) –

+0

suis également la construction d'un tout nouveau projet à partir de zéro avec un bouton et un IBAction, aucun autre code et il me donne toujours le même mal de tête :( –

1

Dans Interface Builder, vous devez le dire le propriétaire de ce fichier est classe. Cliquez sur l'icône "Propriétaire du fichier", accédez au volet Identité dans l'inspecteur (l'icône "i" à la fin) et remplacez la classe par Contact.

+0

Salut, je l'ai fait En outre, juste créé un tout nouveau projet avec rien à l'intérieur d'autre qu'un UIView et un bouton et il se passe toujours :( –

+0

Êtes-vous * sûr *? Cette partie de l'erreur: ''*** - [bouton UIViewControllerPressed: ]: le sélecteur non reconnu envoyé à l'instance 0xd1d5f0'' vous indique qu'une instance de UIViewController reçoit le message, PAS une instance de contact – iKenndac

+0

+1 Je pensais que c'était la bonne réponse –

0

just created a brand new project with nothing inside it other than a UIView and a button and it is still happening

Cela me fait penser que vous ne configurez pas tout à fait correctement. S'il s'agit du fichier nib de l'application et qu'il ne contient rien d'autre qu'un UIView, le propriétaire du fichier sera votre délégué d'application, quel que soit le type de propriétaire du fichier dans IB.

les opérations suivantes:

  1. Créer une instance de Contact dans votre fichier nib: faites glisser un objet UIViewController et définissez sa classe à Contact.

  2. Connectez la vue et le bouton à votre instance Contact.

  3. Faites-nous savoir si cela fonctionne :)

+0

J'ai créé un nouveau projet et cela a bien fonctionné. pense que cela peut avoir quelque chose à voir avec le fait que c'est une vue qui est chargée à partir d'un TabBarController La NIB elle-même est configurée avec le corrigez IBAction et class mais je n'arrive pas à déterminer où le "sélecteur non reconnu" est envoyé. Merci à tous ceux qui ont aidé, je vais continuer jusqu'à ce que je découvre ce que je fais mal :) –

Questions connexes