"unrecognized selector sent to instance" fout in Objective-C

Ik heb een knop gemaakt en er een actie voor toegevoegd, maar zodra hij wordt aangeroepen, krijg ik deze foutmelding:

-[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'

Dit is mijn code:

- (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(@"---");
}
Oplossing

Het lijkt erop dat je het geheugen van de view controller niet goed beheert en dat het op een gegeven moment wordt gedesalloceerd - waardoor de nummerButtonClicked: methode naar een ander object wordt gestuurd dat nu het geheugen inneemt dat de view controller voorheen innam...

Zorg ervoor dat je je view controller op de juiste manier vasthoudt/ontkoppelt.

Commentaren (10)

Voor degenen die hier komen via Google zoals ik deed, die waarschijnlijk meer betrekking heeft op Xcode 4.2 +/iOS 5 + meer, wat met ARC. Ik had dezelfde foutmelding "unrecognized selector sent to instance". In mijn geval had ik een UIButton's target action ingesteld om zichzelf als sender parameter door te geven, maar realiseerde me later dat ik dat niet nodig had en verwijderde dat in code. Dus, zoiets als:

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

Werd veranderd in:

- (IBAction)buttonPressed {

Rechts klikken op de UIButton in kwestie toonde aan dat de Touch Up Inside gebeurtenis was gekoppeld aan de view controllers buttonPressed: methode. Dit verwijderen en opnieuw toewijzen aan de gewijzigde methode werkte wonderwel.

Commentaren (13)

Dit was het top Google-antwoord voor dit probleem, maar ik had een andere oorzaak/resultaat - ik dacht dat ik'mijn twee centen zou toevoegen voor het geval anderen op dit probleem stuiten.

Ik had vanochtend een soortgelijk probleem. Ik ontdekte dat als je met de rechtermuisknop klikt op het UI-item dat je het probleem geeft, je kunt zien welke verbindingen er zijn gemaakt. In mijn geval had ik een knop verbonden met twee acties. Ik verwijderde de acties uit het rechtsklikmenu en verbond ze opnieuw en mijn probleem was opgelost.

Dus zorg ervoor dat je acties goed zijn aangesloten.

Commentaren (2)