Отладка исключения, связанного с нераспознанным селектором

Мне было интересно, если вы могли бы помочь мне.

Я хочу создать ситуацию, в которой, если пользователь вводит определенный текст в текстовое поле, он попадает в новое представление.

Я изо всех сил пытаюсь заставить это работать - я использую следующий код, чтобы спровоцировать это:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{

if ([string isEqualToString:@"\n"]) {

    NSString *lowercaseactualanswer = [footballersurname lowercaseString];
    NSString *lowercaseuseranswer = [textField.text lowercaseString];

    if ([lowercaseuseranswer isEqualToString:lowercaseactualanswer])
    {

        CorrectScreen *screen = [[CorrectScreen alloc] initWithNibName:nil bundle:nil];
        screen.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
        [self presentModalViewController:screen animated:YES];   
    }
    else {
        self.guess.text = [[NSString alloc]initWithFormat: @"%@ is incorrect", textField.text]; 
        textField.text = @"";    
    }

}
return YES;

}

и я использовал тот же метод для перехода к различным экранам в другом месте моего кода с успехом (используя тот же метод, что и в трех строках экрана CorrectScreen *). Полученное сообщение об ошибке:

-[GameScreen textFieldDoneEditing:]: unrecognized selector sent to instance 0x6c43e20

и при добавлении точки останова исключения - зеленая стрелка останавливается на строке, начинающейся [self presentModal....] с потоком, выделяющим следующее:

-[GameScreen textField:shouldChangeCharactersInRange:replacementString:]

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

У кого-нибудь есть какие-либо идеи? Я немного застрял на данный момент, и я уверен, что кто-то там может помочь!

Спасибо большое!

Энди

1 ответ

Решение

Я подозреваю, что происходит следующее:

  1. вы находитесь в текстовом поле;

  2. при изменении содержимого поля вы представляете модальное представление;

  3. представив модальное представление, попытайтесь завершить сеанс редактирования, отправив textFieldDoneEditing на ваш GameScreen объект;

  4. textFieldDoneEditing не определен для GameScreen, так что ваша программа падает.

Исправление определяет этот метод для вашего класса.

поскольку textFieldDoneEditing не является частью iOS SDK (насколько я вижу), я предполагаю, что вы определили его в Интерфейсном Разработчике как действие, которое запускается событием "Редактирование завершено" в текстовом поле. Вы также можете соответствующим образом изменить эту привязку, чтобы устранить проблему.

Другие вопросы по тегам