Ошибка EXC_BAD_ACCESS .. текстовое поле resignFirstResponder - PullRequest
1 голос
/ 22 октября 2011

Я новичок в этом материале Xcode.

Детали моей ошибки:

1) Я начал с служебного приложения в Xcode

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

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

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

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

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

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

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

Консоль показывает журнал IN FUNCTION.

Спасибо

1 Ответ

2 голосов
/ 22 октября 2011

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

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

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

Из UITextFieldDelegate Protocol документы:

textFieldShouldReturn:

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


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

Установите NSZombieEnabled , MallocStackLogging и guard malloc в отладчике. Затем, когда ваше приложение падает, введите в консоли gdb:

(gdb) info malloc-history 0x543216

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

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


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

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

Simulator

...