Из того, что я узнал до сих пор: в Objective-C вы можете отправить любое сообщение любому объекту. Если объект реализует правильный метод, он будет выполнен, иначе ничего не произойдет. Это происходит потому, что до отправки сообщения Objective-C будет выполнять отвечаетSoSelector.
Надеюсь, я до сих пор прав.
Я сделал небольшую программу для тестирования, где действие вызывается каждый раз при перемещении ползунка. Также для тестирования я установил отправителя NSButton, но на самом деле это NSSlider. Теперь я спросил объект, будет ли он отвечать на setAlternateTitle. Пока NSButton будет делать, а NSSlider - нет. Если я запустил код и сам сделаю отвечаетSoSelector, он скажет мне, что объект не будет отвечать на этот селектор. Если я проведу что-то вроде 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, программа выйдет из строя, и я не совсем уверен, почему. Должна ли она отвечать на запросSolector перед отправкой сообщения?