"selector no reconocido enviado a la instancia" error en Objective-C

He creado un botón y he añadido una acción para él, pero tan pronto como se invoca, tengo este error:

-[NSCFDictionary numberButtonClick:]: unrecognized selector sent to instance
 0x3d03ac0 2010-03-16 22:23:58.811
 Money[8056:207] *** Terminating app
 due to uncaught exception
 'NSInvalidArgumentException', reason:'*** -[NSCFDictionary numberButtonClick:]:  unrecognized selector sent to instance 0x3d03ac0'

Este es mi código:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        UIButton *numberButton = [UIButton buttonWithType:UIButtonTypeCustom];        
        numberButton.frame = CGRectMake(10, 435, 46, 38);
        [numberButton setImage:[UIImage imageNamed:@"one.png"] forState:UIControlStateNormal];
        [numberButton addTarget:self action:@selector(numberButtonClick:) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview: numberButton]; 
    }
return self;
}

-(IBAction)numberButtonClick:(id)sender{
    NSLog(@"---");
}
Solución

Parece que no estás gestionando correctamente la memoria del controlador de vista y se está desasignando en algún momento - lo que hace que el método numberButtonClicked: se envíe a otro objeto que ahora está ocupando la memoria que el controlador de vista estaba ocupando anteriormente...

Asegúrate de que estás reteniendo/liberando correctamente tu controlador de vista.

Comentarios (10)

Para aquellos que llegan aquí a través de Google como lo hice, que probablemente se refiere más a Xcode 4.2 + / iOS 5 + más, lo que con ARC. Tuve el mismo error "selector no reconocido enviado a la instancia**". En mi caso tenía una acción de destino de UIButton's configurado para pasar a sí mismo como el parámetro de remitente, pero más tarde se dio cuenta de que no' necesita y eliminado que en el código. Así que, algo como

- (IBAction)buttonPressed:(UIButton *)sender {

Fue cambiado a:

- (IBAction)buttonPressed {

Al hacer clic con el botón derecho en el UIButton en cuestión, se vio que el evento Touch Up Inside estaba asociado al método buttonPressed: de los controladores de la vista. Eliminar esto y reasignarlo al método modificado funcionó de maravilla.

Comentarios (13)

Esta fue la respuesta principal de Google para este problema, pero tuve una causa/resultado diferente - Pensé que añadiría mis dos centavos en caso de que otros se tropiecen con este problema.

Tuve un problema similar esta misma mañana. Descubrí que si haces clic con el botón derecho en el elemento de la interfaz de usuario que te da el problema, puedes ver qué conexiones se han creado. En mi caso tenía un botón conectado a dos acciones. He eliminado las acciones del menú del botón derecho y las he vuelto a conectar y mi problema se ha solucionado.

Así que asegúrate de que tus acciones están bien conectadas.

Comentarios (2)