UITextView委托类在单击textview时崩溃了?!这是怎么回事?

skå*_*fan 5 iphone cocoa-touch delegates uitextview ios4

所以我看到了这个问题:如何将UITextView的"委托"插座连接到实现UITextViewDelegate协议的类?

我的问题类似于booboo在第二个响应中描述的内容(不是标记为答案的那个).

我有一个实现UITextViewDelegateMyViewController.在nib的界面构建器中,在视图中我选择了TextView并将其委托分配给文件所有者(这是MyViewController).

MyViewController已实现

- (void)textViewDidBeginEditing:(UITextView *)textView
{
NSLog(@"TextView EDIT %@",textView);
}
Run Code Online (Sandbox Code Playgroud)

我每次测试我的应用程序时,只要单击TextView就会出现EXC_BAD_ACCESS崩溃.如果我删除IB中的委托链接,那么键盘弹出正常.

我还尝试在MyViewController内的textview中创建一个IBOutlet UITextView,并将TextView链接到文件所有者中的这个IBOutlet.在viewDidLoad然后我分配:

myDescriptionTextField.delegate = self;
Run Code Online (Sandbox Code Playgroud)

但是,一旦单击TextView,这也会导致EXC_BAD_ACCESS出现同样的问题.

在顶部的XCODE崩溃堆栈跟踪(我认为这是什么?)崩溃的地方说:

objc_msgSend ??

-[UIResponder becomeFirstResponder]
-[UITextView becomeFirstResponder]
-[UITextInteractionAssistant setFirstResponderIfNecessary]
Run Code Online (Sandbox Code Playgroud)

......等等?

这有帮助吗?我对这个问题很遗憾?一切看起来都很正确.

MHC*_*MHC 6

我会检查MyViewController对象是如何创建和管理的(如何将对象保留在应用程序中).当您的UITextView存在成为您的某个UIView对象addSubview的子视图(保留子视图)时,可能会在MyViewController构建视图层次结构后从内存中释放对象本身.

myDescriptionTextField.delegate = self;
Run Code Online (Sandbox Code Playgroud)

不保留self,因为保留代表可能会导致参考周期问题.

检查一下,如果它没有解决问题,请尝试使用NSZombieEnabled进行调试,因为它会告诉您在哪里确切地引用了无效对象.