0

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

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

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

- (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 

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

-[GameScreen textField:shouldChangeCharactersInRange:replacementString:] 

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

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

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

Энди

ответ

0

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

  1. вы в текстовом поле;

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

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

  4. textFieldDoneEditing не определен для GameScreen, поэтому ваша программа вылетает из строя.

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

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

+0

Да, вы правы! Я пытался уволить первого ответчика в классе shouldChangeCharactersInRange, и поэтому при создании класса textFieldDoneEditing, предлагая и откладывая его там, он работал отлично. Огромное спасибо! – user1309044