これまでに私が学んだことから、Objective-Cでは任意のメッセージを任意のオブジェクトに送信できます。オブジェクトが適切なメソッドを実装している場合は、それ以外の場合は実行されませんが、何も起こりません。これは、メッセージが送信される前にObjective-CがrespondsToSelectorを実行するためです。Objective-C respondsToSelector
私はこれまでのところ願っています。
私は、スライダを動かすたびにアクションが呼び出される場所をテストするための小さなプログラムを作成しました。また、テストのために、送信者をNSButtonに設定しましたが、実際はNSSliderです。今私はsetAlternateTitleに応答するかどうかオブジェクトに尋ねました。 NSButtonは実行しますが、NSSliderは実行しません。私がコードを実行してrespondsToSelector自分でそれはオブジェクトがそのセレクタに応答しないことを教えてくれます。私がのintValueのような何かをテストすると応答します。だから私のコードは今のところうまくいきます。
- (IBAction)sliderDidMove:(id)sender
{
NSButton *slider = sender;
BOOL responds =
[slider respondsToSelector:@selector(setAlternateTitle)];
if(responds == YES)
{
NSLog(@"YES");
}
else
{
NSLog(@"NO");
}
[slider setAlternateTitle:@"Hello World"];
}
実際にsetAlternateTitleメッセージを送信すると、プログラムがクラッシュすることがあります。その理由はわかりません。メッセージを送信する前にrespondSelectorを実行してはいけませんか?
+1です。このプロセス全体が詳細に文書化されているリンクをいくつか用意してください。それは読む価値があります。 – taskinoor
docsはここにあります:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Introduction/Introduction.html一部...その他のものはNSObjectクラスリファレンス – Psycho
にあります、forwardingTargetForSelector: 'はMac OS X 10.6+またはiOS 4+にのみあります – user102008