Ошибка EXC_BAD_ACCESS.. текстовое поле resignFirstResponder Первый ответчик

#iphone #ios #xcode4 #objective-c-2.0

#iPhone #iOS #xcode4 #objective-c-2.0

Вопрос:

Я новичок в этом Xcode.

Подробности моей ошибки:

1) Я начал с утилиты application в Xcode

2) В моем MainView.xibI разместил текстовое поле. и связал его с кодом самым простым способом.(просто перетаскиваю в мой файл MainViewController.h. ..который объявил его и даже установил для него как свойство, так и синтез.)

3) Теперь, когда я запускаю программу.. Я вижу свое текстовое поле..Я нажимаю на него..Появляется клавиатура … и когда я пытаюсь ввести … сразу после 1 или 2 букв появляется сообщение об ошибке UIApplicationMain EXC_BAD_ACCESS . Я искал его довольно долго, и где-то здесь, только при переполнении стека, я нашел решение изменить исправление в текстовом поле на no .., которое решает проблему… Это не моя главная проблема .. но я хочу подтвердить, можно ли продолжать использовать этот метод в будущем …. когда-нибудь в будущем я захочу включить коррекцию.

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

 -(BOOL) textFieldShouldReturn:(UITextField *)textField {    
    // if([textField becomeFirstResponder]) {
    NSLog(@"IN FINCTION");
    [textField resignFirstResponder];
    return YES;
}
 

Программа была запущена с комментариями обеих строк и без комментариев, но все равно каждый раз, когда она достигает конца функции, она приводит меня к той же ошибке в UIApplicationMain : EXC_BAD_ACCESS .

Кроме того, я включил zombies, но я не уверен, правильно ли я это сделал, поэтому, если кто-нибудь из вас, ребята, хочет получить информацию об этом.

Я проверил код на другой версии Xcode .. один был нормальным, а другой — GM.

Консоль показывает вход в ФУНКЦИЮ.

Спасибо

Ответ №1:

Вы хотели бы вернуться NO из этого метода, потому что в том виде, в котором он у вас есть сейчас, вы удаляете фокус (и курсор) из текстового поля, но затем указываете, что хотите обработать кнопку возврата. Но поскольку вы уволили первого ответчика, некому обработать нажатие кнопки возврата.

Попробуйте это:

 -(BOOL) textFieldShouldReturn:(UITextField *)textField {    
    [textField resignFirstResponder];
    return NO;
}
 

Из UITextFieldDelegate Protocol docs:

textFieldShouldReturn:

Запрашивает делегата, должно ли текстовое поле обрабатывать нажатие кнопки возврата.


Если вышеуказанное не работает, попробуйте следующее:

Установите NSZombieEnabled, MallocStackLogging и защитите malloc в отладчике. Затем, когда ваше приложение выйдет из строя, введите это в консоли gdb:

 (gdb) info malloc-history 0x543216
 

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

Более подробные инструкции см. В этой статье (how-to-debug-exc_bad_access-on-iphone).


Если вышеуказанное также не работает, попробуйте следующее:

Вы также можете попробовать отключить «Автокоррекцию» в настройках клавиатуры симулятора. В одной из версий симулятора есть ошибка, которая может вызвать сбой при попытке ввода текста в текстовое поле.

Тренажёр

Комментарии:

1. Спасибо.. Тэд сделал это!. Я ответил «НЕТ»!.