"μη αναγνωρισμένος επιλογέας που αποστέλλεται στην περίπτωση" σφάλμα σε Objective-C

Δημιούργησα ένα κουμπί και πρόσθεσα μια ενέργεια γι' αυτό, αλλά μόλις το ενεργοποίησα, έλαβα αυτό το σφάλμα:

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

Αυτός είναι ο κώδικάς μου:

- (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(@"---");
}
Λύση

Μοιάζει σαν να μην διαχειρίζεστε σωστά τη μνήμη του ελεγκτή προβολής και να αποδεσμεύεται σε κάποιο σημείο - γεγονός που προκαλεί την αποστολή της μεθόδου numberButtonClicked: σε ένα άλλο αντικείμενο που τώρα καταλαμβάνει τη μνήμη που προηγουμένως καταλάμβανε ο ελεγκτής προβολής...

Βεβαιωθείτε ότι διατηρείτε/απελευθερώνετε σωστά τον ελεγκτή προβολής σας.

Σχόλια (10)

Για όσους έφτασαν εδώ μέσω Google όπως εγώ, το οποίο μάλλον αφορά περισσότερο το Xcode 4.2+/iOS 5+, με το ARC. Είχα το ίδιο σφάλμα "αναγνωρισμένος επιλογέας που αποστέλλεται στην περίπτωση". Στην περίπτωσή μου είχα ρυθμίσει την ενέργεια-στόχο ενός UIButton's ώστε να περνάει ο ίδιος ως παράμετρος αποστολέα, αλλά αργότερα συνειδητοποίησα ότι δεν το χρειαζόμουν και το αφαίρεσα στον κώδικα. Έτσι, κάτι σαν:

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

Άλλαξε σε: "{\i1}Τι είναι αυτό;":

- (IBAction)buttonPressed {

Κάνοντας δεξί κλικ στο εν λόγω UIButton έδειξε ότι το συμβάν Touch Up Inside συσχετίστηκε με τη μέθοδο buttonPressed: των ελεγκτών προβολής. Η αφαίρεση αυτού του γεγονότος και η εκ νέου ανάθεσή του στην τροποποιημένη μέθοδο λειτούργησε άψογα.

Σχόλια (13)

Αυτή ήταν η κορυφαία απάντηση της Google για αυτό το θέμα, αλλά είχα μια διαφορετική αιτία / αποτέλεσμα - σκέφτηκα ότι θα προσθέσω τα δύο σεντς μου σε περίπτωση που άλλοι σκοντάψουν σε αυτό το πρόβλημα.

Είχα ένα παρόμοιο ζήτημα μόλις σήμερα το πρωί. Διαπίστωσα ότι αν κάνετε δεξί κλικ στο στοιχείο UI που σας δημιουργεί το πρόβλημα, μπορείτε να δείτε ποιες συνδέσεις έχουν δημιουργηθεί. Στην περίπτωσή μου είχα ένα κουμπί συνδεδεμένο με δύο ενέργειες. Διέγραψα τις ενέργειες από το μενού δεξιού κλικ και τις επανασύνδεσα και το πρόβλημά μου διορθώθηκε.

Βεβαιωθείτε λοιπόν ότι οι ενέργειές σας είναι σωστά συνδεδεμένες.

Σχόλια (2)