2011-02-13 40 views
4

所以,我看到了这样一个问题:(不是一个标记为答案)How do you connect the "delegate" outlet of a UITextView to a class that implements UITextViewDelegate protocol?UITextView委托类在单击文本视图时崩溃?这是怎么回事?

我的问题是类似于BOOBOO在第二反应描述

我有一个MyViewController它实现UITextViewDelegate。在笔尖界面生成器,在视图中我选择了TextView的并赋予它的代表对文件所有者(这是MyViewController。)

MyViewController已实施

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

我每次测试我的应用程序虽然,只要我点击TextView我得到一个EXC_BAD_ACCESS崩溃。如果我删除IB中的代表链接,那么键盘弹出正常。

我也尝试在MyViewController里创建一个IBOutlet UITextView到文本视图,并将TextView链接到File Owner中的这个IBOutlet。在viewDidLoad中,然后我给你:

myDescriptionTextField.delegate = self; 

但是,这也只要我点击的TextView导致一个EXC_BAD_ACCESS的同样的问题。

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

objc_msgSend ?

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

...等等?

这有帮助吗?我很遗憾这个问题是什么?一切似乎链接正确。

+0

在猜测我会说有什么东西与你的连接断了。你可以在`viewDidLoad`方法中设置一个断点,你可以将委托设置为self并检查你的UITextView变量是否已经被初始化(即它的内存地址不是0x0)? – Rog 2011-02-13 20:21:29

+0

请告诉我们如何初始化MyViewController。 – raidfive 2011-02-13 22:55:04

回答

5

我会检查如何创建和管理MyViewController对象(如何将对象保留在应用程序中)。虽然UITextView存在,但它会成为UIView对象之一的子视图(addSubview保留子视图),但在构建视图层次结构后,将从内存中释放对象MyViewController

myDescriptionTextField.delegate = self; 

不保留self,作为保持委托可能引起的参考周期的问题。

检查这一点,如果它不能解决问题,请尝试使用NSZombieEnabled进行调试,因为它会告诉你在哪里对无效对象进行了引用。

0

另外我得到了你的问题!

我解决通过传递,而不是自我

__weak typeof(self) weakSelf = self; 

不是使用weakSelf弱委托!