Нераспознанный селектор отправил экземпляру сообщение об ошибке из UIButton - PullRequest
5 голосов
/ 17 мая 2011

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

    UIButton *alertButton = [UIButton buttonWithType:UIButtonTypeInfoDark];     
    [alertButton addTarget:self.tableView action:@selector(showAlert:) 
          forControlEvents:UIControlEventTouchUpInside];
    alertButton.frame = CGRectMake(220.0, 20.0, 160.0, 40.0);

    [self.tableView addSubview:alertButton];

и вот метод оповещения, который я хочу активировать при нажатии кнопки InfoDark UIB:

- (void) showAlert {
        UIAlertView *alert = 
         [[UIAlertView alloc] initWithTitle:@"My App" 
                                    message: @"Welcome to ******. \n\nSome Message........" 
                                   delegate:nil 
                          cancelButtonTitle:@"Dismiss" 
                          otherButtonTitles:nil];
        [alert show];
        [alert release];
}

спасибо за любую помощь.

Ответы [ 3 ]

5 голосов
/ 18 мая 2011

Хорошо, у тебя две проблемы.Одним из них является проблема селектора, как указано выше, но ваша настоящая проблема:

[alertButton addTarget:self.tableView 
                action:@selector(showAlert:) 
      forControlEvents:UIControlEventTouchUpInside];

Это неверная цель, если у вас нет подкласса UITableView для ответа на предупреждение.измените этот код на:

[alertButton addTarget:self 
                action:@selector(showAlert) 
      forControlEvents:UIControlEventTouchUpInside];
5 голосов
/ 17 мая 2011

Причина сбоя: ваш showAlert прототип функции должен быть - (void) showAlert:(id) sender.

Используйте код ниже

- (void) showAlert:(id) sender {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"My App" message: @"Welcome to ******. \n\nSome Message........" delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
        [alert show];
        [alert release];
}

Как говорит Джейкоб Релкин в своем ответе здесь :

Потому что вы включили двоеточие (:) в ваш аргумент селектора для addTarget, приемный селектор должен принять параметр. Время выполнения не распознать селектор @selector (buttonTouched :), потому что нет метода с таким именем который принимает параметр. Изменить сигнатура метода для принятия параметра введите id для решения этой проблемы.

3 голосов
/ 17 мая 2011

Джхалия верна, но вот краткое объяснение почему.

Когда вы настроили цель кнопки, вы определили селектор следующим образом:

@selector( showAlert: )

Двоеточие (:) устанавливаетсигнатура метода для селектора, требующего один аргумент.Однако ваш метод был определен как -showAlert, не принимая аргументов, поэтому ваш объект фактически не реализовал метод, который вы указали UIButton для вызова.Будет работать переопределение вашего метода, как показано Джхалией, и изменение селектора вашей кнопки цели на:

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