NSTextField をサブクラス化し、textDidChange:を次のように上書きします。
- (void)textDidChange:(NSNotification *)notification
{
// ... My own operation
}
しかし、入力テキスト ボックスを.xibファイルにドラッグし、コントロールを別のクラスにドラッグしてデリゲートを割り当てると、デリゲートのcontrolTextDidChange:メソッドが呼び出されないことがわかりました。
この問題を解決しようとして、以下の2つの方法を試しました:
I. 呼び出しsuper:
- (void)textDidChange:(NSNotification *)notification
{
// ... My own operation
[super textDidChange:notification];
}
しかし、実行時にエラーが発生しました:オブジェクトから nil オブジェクトを挿入しようとしています [0]
Ⅱ.の呼び出しdelegate方法
- (void)textDidChange:(NSNotification *)notification
{
// ... My own operation
if ([self.delegate responseToSelector:@selector(controlTextDidChange:)])
{
[self.delegate ...]; // <--- Opps, something not happerned here.
}
}
何が起こらなかったのですか?オートコンプリートcontrolTextDidChange:で上記の位置にメソッドが表示されるはずだと思っていました...。しかし、実際にはそうではありませんでした。メソッドを直接入力しましたが、メソッドが見つからないためコンパイルに失敗しました。
サブクラスでデリゲートを通常どおり呼び出すにはどうすればよいですか? textDidChange:メソッドを正しく上書きするにはどうすればよいですか?
ヴィータウタスへのさらなる質問:
- 使っていたに違いありません
NSTextField。そして、controlTextDidChange: メソッド内にブレーク ポイントを設定します。そう呼ばれていたので、私は知っていたはずです。 - テキストフィールドをデリゲートオブジェクトにコントロールドラッグし、メソッドにデリゲートオブジェクトを出力しました
textDidChange:。デリゲートが正しく設定されていることは確かでした。 - などの他のデリゲート メソッドは
controlTextDidBeginEditing:正しく呼び出されました。でもcontrolTextDidChange:呼ばれない NSTextFieldサブクラス化されたクラスで上書きされたものをコメントアウトしてみたら、controlTextDidChange:呼び出されました。textDidChange:したがって、私は権利を上書きしていないことを確信していました。しかし、私はそれを修正する方法がわかりません。- 私を混乱させたのは、
controlTextDidChange:メソッドを呼び出そうとしたときにオートコンプリートがメソッドを表示しなかった理由です。
オートコンプリートについては、次のように表示されます。
方法はありません- controlTextDidChange:。
Vytautas への 2 回目の返信:
「[self controlTextDidChange]」を呼び出してみましたが、機能せず、エラーが発生しました (以下で強調表示されています)。
