ошибка «нераспознанный селектор отправлен в экземпляр» в Objective-C - PullRequest
146 голосов
/ 16 марта 2010

Я создал кнопку и добавил для нее действие, но как только он вызвал, я получил эту ошибку:

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

Ответы [ 36 ]

3 голосов
/ 11 января 2017

У меня тоже была такая же проблема.

Я удалил свой uibutton в свою раскадровку и воссоздал его .. теперь все работает отлично.

3 голосов
/ 07 ноября 2012

У меня была похожая проблема, но для меня решение было немного другим. В моем случае я использовал Category для расширения существующего класса (UIImage для некоторых возможностей изменения размера - см. Этот howto , если вам интересно) и забыл добавить файл * .m в цель сборки. Глупая ошибка, но не всегда очевидная, когда случается, где искать. Я думал, что стоит поделиться ...

2 голосов
/ 11 сентября 2012

Я думаю, вы должны использовать void вместо IBAction в типе возврата. потому что вы определили кнопку программно.

2 голосов
/ 14 января 2017

Это произошло с моим, потому что случайно стерли "@IBAction func ..." внутри моего кода класса UIViewcontroller, поэтому в раскадровке была создана ссылка на выход, но во время выполнения была какая-то функция для ее обработки.

Решение состояло в том, чтобы удалить ссылку Outlet внутри инспектора свойств, а затем заново создать ее, перетащив ее с помощью клавиши команды в код класса.

Надеюсь, это поможет!

1 голос
/ 24 августа 2018

В моем случае я решил проблему через 2 часа:

Отправитель (элемент tabBar) не имеет ссылки на выход . Так что он никуда не указывал.

Juste создайте ссылочный выход , соответствующий вашей функции.

Надеюсь, это поможет вам, ребята.

1 голос
/ 12 сентября 2016

Для меня это было оставшееся соединение, созданное в interfacebuilder bij ctrl-dragging. Имя разорванного соединения было в журнале ошибок

*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '-[NameOfYourApp.NameOfYourClass nameOfCorruptConnection:]:
unrecognized selector sent to instance 0x7f97a48bb000'

У меня было действие, связанное с кнопкой. Нажатие кнопки привело к сбою приложения, потому что в моем коде больше не было Outlet. Поиск имени в журнале привел меня к нему в раскадровке. Удалил его, и авария исчезла!

1 голос
/ 02 марта 2016

У меня была такая же проблема. Проблема для меня заключалась в том, что у одной кнопки было два метода действий. Я создал первый метод действия для моей кнопки, а затем удалил его в контроллере представления, но забыл отключить соединение в основной раскадровке в инспекторе соединений. Поэтому, когда я добавил второй метод действия, теперь для одной кнопки было два метода действия, что вызвало ошибку.

1 голос
/ 24 марта 2014

.. А теперь мой

У меня была кнопка, связанная с методом, который обращался к параметру другой кнопки, и это работало отлично, НО, как только я попытался что-то сделать с самой кнопкой, у меня произошел сбой. Во время компиляции ошибки не отображались. Решение?

Мне не удалось связать кнопку с владельцем файла. Так что, если кто-нибудь здесь такой же глупый, как я, попробуйте это:)

1 голос
/ 28 марта 2013

В настоящее время я изучаю разработку под iOS и изучаю книгу «Начало разработки под iOS6» от aPress. Я получал ту же ошибку в главе 10: Раскадровки.

Мне потребовалось два дня, чтобы понять это, но обнаружил, что я случайно установил тег ячейки TableView в 1, когда мне не следовало этого делать. Для всех, кто делает эту книгу и получает подобную ошибку, я надеюсь, что это поможет.

Я действительно надеюсь, что будущие ошибки в моем коде будет легче найти! хахаха. Ошибка отладки никак не подтолкнула меня в правильном направлении, чтобы понять это (или, по крайней мере, я слишком новичок, чтобы понимать отладчик, смеется).

1 голос
/ 03 апреля 2013

В моем случае я использовал UIWebView и передал NSString во втором параметре вместо NSURL. Поэтому я подозреваю, что неправильные типы классов, переданные в функции, могут вызвать эту ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...