2011-02-13 51 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弱委託!