"nicht erkannter Selektor an Instanz gesendet" Fehler in Objective-C

Ich habe eine Schaltfläche erstellt und eine Aktion für sie hinzugefügt, aber sobald sie aufgerufen wird, erhalte ich diese Fehlermeldung:

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

Dies ist mein 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(@"---");
}
Lösung

Es sieht aus wie you're nicht Speicher Verwaltung der View-Controller ordnungsgemäß und es wird deallocated an einem gewissen Punkt - die bewirkt, dass die numberButtonClicked:-Methode an ein anderes Objekt, das jetzt den Speicher, die der View-Controller zuvor besetzt ist gesendet werden...

Vergewissern Sie sich, dass Sie Ihren View-Controller richtig halten/freigeben.

Kommentare (10)

Für diejenigen, die hier über Google bekommen, wie ich es tat, was wahrscheinlich mehr zu Xcode 4.2+/iOS 5+ mehr betrifft, was mit ARC. Ich hatte den gleichen Fehler "unrecognized Selektor gesendet, um Instanz". In meinem Fall hatte ich eine UIButton's Ziel Aktion eingerichtet, um sich selbst als Absender-Parameter übergeben, aber später realisiert ich brauchte es nicht und entfernt, dass im Code. Also, etwas wie:

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

wurde geändert in:

- (IBAction)buttonPressed {

Ein Rechtsklick auf die betreffende UIButton zeigte, dass das Touch Up Inside-Ereignis mit der buttonPressed:-Methode des View-Controllers verknüpft war. Das Entfernen dieses Ereignisses und die Neuzuweisung an die geänderte Methode funktionierte einwandfrei.

Kommentare (13)

Dies war die Top-Google-Antwort für dieses Problem, aber ich hatte eine andere Ursache/Ergebnis - ich dachte, ich würde in meine zwei Cent hinzufügen, falls andere über dieses Problem stolpern.

Ich hatte erst heute Morgen ein ähnliches Problem. Wenn Sie mit der rechten Maustaste auf das UI-Element klicken, das das Problem verursacht, können Sie sehen, welche Verbindungen erstellt wurden. In meinem Fall hatte ich eine Schaltfläche mit zwei Aktionen verbunden. Ich löschte die Aktionen aus dem Rechtsklickmenü und verknüpfte sie neu, und mein Problem war behoben.

Stellen Sie also sicher, dass Ihre Aktionen richtig verdrahtet sind.

Kommentare (2)