2014-02-06 49 views
-1
In my application I am adding following observer in init method of class A. 


[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(keyboardWillShow:) 
               name:UIKeyboardWillShowNotification 
               object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(keyboardWillHide:) 
               name:UIKeyboardWillHideNotification 
               object:nil]; 

然後我從擴展類A keyboardWillShow和keyboardWillHide方法B類都寫在超類,即A類。但是應用程序會引發以下異常,當我點擊一些的TextView輸入文字。iOS版 - keyboardWillShow:無法識別的選擇發送到實例

terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '-[B keyboardWillShow:]: unrecognized selector sent to instance xyz' 

這是混淆因爲方法已經寫在晚飯B類的。如果是由於無效的參數,它再怎麼可以作爲參數通過的iOS本身傳遞。

+2

你怎麼定義keyboardWillToggle?是否需要爭論? – foggzilla

+3

請發佈您的keyboardWillToggle方法聲明: – Marco

+2

您的錯誤說「keyboardWillShow」,但您的代碼有「keyboardWillToggle」。這是你的問題中的錯字,還是你的代碼中有什麼? – rdelmar

回答

3

很難從這段代碼中分辨出來,但看起來您的方法名稱中有錯誤。在您提供的代碼中,您正在使用名爲「keyboardWillToggle:」的方法註冊通知。但是,錯誤表明您正嘗試調用「keyboardWillShow:」方法。

它很可能是最好的聲明和實現「keyboardWillShow:」和「keyboardWillHide:」你的A類,然後註冊這樣的通知:

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(keyboardWillShow:) 
              name:UIKeyboardWillShowNotification 
              object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(keyboardWillHide:) 
              name:UIKeyboardWillHideNotification 
              object:nil]; 
1

看來你需要在你的類中聲明/定義名爲keyboardWillShow:的方法。

0

這只是發生在我身上,和該方法確實存在,但它們沒有在我的.h文件中聲明。 含義,該方法應該是公開的,可由NSNotificationCenter訪問。

0

失敗的原因是因爲您沒有在自己發現的新控制器中實現這些方法。一旦你離開那個控制器,你必須刪除這些觀察者。否則,在任何其他控制器中,當你需要使用鍵盤時,那些觀察將被觸發,並且他們將在你的類中搜索這些方法,但是如果你沒有定義它們,它會拋出你描述的錯誤。

相關問題