2013-05-15 84 views
0

我子類的NSTextField和覆蓋textDidChange:爲:如何正確覆蓋textDidChange:方法?

- (void)textDidChange:(NSNotification *)notification 
{ 
    // ... My own operation 
} 

但是,當我拖動一個文本輸入框到我的.xib文件和調速拖動另一個類來分配,我發現委託的controlTextDidChange:方法的委託從未被召喚過。

現在要來試圖解決這個問題,我嘗試了兩種方式下面人:

一叫super

- (void)textDidChange:(NSNotification *)notification 
{ 
    // ... My own operation 
    [super textDidChange:notification]; 
} 

但我得到了在運行時出現錯誤:嘗試從對象[插入零對象0]

II。打電話delegate的方法

- (void)textDidChange:(NSNotification *)notification 
{ 
    // ... My own operation 
    if ([self.delegate responseToSelector:@selector(controlTextDidChange:)]) 
    { 
     [self.delegate ...]; // <--- Opps, something not happerned here. 
    } 
} 

什麼沒有happerned?我預計自動完成應在上面的位置...處顯示controlTextDidChange:方法。但事實並非如此。我直接鍵入方法,編譯失敗,因爲找不到方法。

我該如何讓我的子類正常地調用委託?我應該如何正確覆蓋textDidChange:方法?


爲維陶塔斯進一步的問題:

  1. 我相信我是用NSTextField。我在controlTextDidChange:方法中設置了一個斷點。正如它所說的,我應該知道。
  2. 我沒有控制拖動文本字段的委託對象,而我打印的textDidChange:方法委託對象,這是確保委派設置正確。
  3. 正確調用其他代表方法,例如controlTextDidBeginEditing:。但controlTextDidChange:不叫
  4. 我試過評論覆蓋NSTextField類的覆蓋,然後controlTextDidChange:被調用。
  5. 因此我確定我不會覆蓋textDidChange:的權利。但我不知道如何解決它。
  6. 是什麼讓我困惑主要是,爲什麼自動完成並沒有表現出controlTextDidChange:方法時我試圖把它。

關於自動完成,在這裏是如何顯示:

http://i44.tinypic.com/11rxh5f.jpg

沒有- controlTextDidChange:方法。對於維陶塔斯


第二進一步答覆:

我打過電話 '[自我controlTextDidChange]',但它沒有工作,且發生錯誤(如下高亮): http://oi41.tinypic.com/9i9pmx.jpg

+0

你是否檢查該委託聲明的任何必要的委託協議的替代方法? – uchuugaka

+0

是的。我很確定,不管這個代表如何。自動完成在'responseToSelector:'方法中爲我填充'controlTextDidChange',但是我不能直接將它調用爲'[self.delegate controlTextDidChange:notification];'的格式。 –

回答

1

我可以說那- controlTextDidChange:肯定會被調用。

也許你的* .xib中的綁定有問題。

此外,它可以在* .xib中使用NSTextView,而不是NSTextField。

在這種情況下- controlTextDidChange:將不會被確認。 如果是這種情況,那麼你應該看看NSTextView,NSTextViewDelegateNSTextDelegate。 NSTextView委託有此- textDidChange:

+0

我在我的問題文本中添加了一些更復雜的描述。 –

+0

所以,你正在覆蓋NSTextField的'-textDidChange:',然後看看這裏:['[NSControl controlTextDidChange:]'](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ ApplicationKit/Classes/NSControl_Class/Reference/Reference.html#// apple_ref/occ/instm/NSObject/controlTextDidChange :),背後有一些魔力。正如我記得的,只需在你的'[NSTextField textDidChange:]'實現中調用'[self controlTextDidChange:]',並且參數使用你收到的相同通知。 – Vytautas

+0

由於我在問題文本中發佈,因此無法正常工作。然而,我找到了解決方案:我可以調用'[self.delegate performSelector:@selector(controlTextDidChange :) withObject:notification];'並且委託成功接收。 –