Класс делегата UITextView падает при нажатии на текстовое представление ?!В чем дело? - PullRequest
5 голосов
/ 13 февраля 2011

Итак, я увидел этот вопрос: Как подключить выход «делегата» UITextView к классу, который реализует протокол UITextViewDelegate?

Моя проблема похожа на то, что бубу описывает во втором ответе (не тот, который помечен как ответ).

У меня есть MyViewController , который реализует UITextViewDelegate . В конструкторе интерфейса для пера, внутри представления я выбрал TextView и назначил его делегат Владельцу файла (MyViewController.)

MyViewController реализовал

- (void)textViewDidBeginEditing:(UITextView *)textView
{
NSLog(@"TextView EDIT %@",textView);
}

Каждый раз, когда я тестирую свое приложение, как только я нажимаю на TextView, я получаю EXC_BAD_ACCESS сбой. Если я удалю ссылку делегата в IB, то клавиатура выскочит нормально.

Я также пытался создать IBOutlet UITextView для textview внутри MyViewController и связать TextView с этим IBOutlet в Владельце файла. В viewDidLoad тогда я назначаю:

myDescriptionTextField.delegate = self;

Но это также приводит к той же самой проблеме EXC_BAD_ACCESS, как только я щелкаю TextView.

Внутри XCODE наверху, когда он падает, трассировка стека (я думаю, это то, что есть?) Того, где он падает, говорит:

objc_msgSend ??

-[UIResponder becomeFirstResponder]
-[UITextView becomeFirstResponder]
-[UITextInteractionAssistant setFirstResponderIfNecessary]

... и т.д?

Это помогает? Я так запутался в том, что это за проблема? Кажется, все связано правильно.

Ответы [ 2 ]

6 голосов
/ 13 февраля 2011

Я бы проверил, как объект MyViewController создается и управляется (как вы сохраняете объект в своем приложении). Вполне возможно, что хотя ваш UITextView существует и становится подпредставлением одного из ваших UIView объектов (addSubview сохраняет подпредставление), сам объект MyViewController высвобождается из памяти после создания иерархии представлений ,

myDescriptionTextField.delegate = self;

не сохраняет self, так как сохранение делегата может вызвать проблему ссылочных циклов.

Проверьте это, и если это не решит проблему, попробуйте отладку с NSZombieEnabled, потому что она скажет вам, где именно вы делаете ссылку на недопустимый объект.

0 голосов
/ 23 апреля 2015

Также у меня возникла ваша проблема!

Я решаю, передав слабый делегат вместо себя

__weak typeof(self) weakSelf = self;

, чем использую weakSelf !!

...