相关疑难解决方法(0)

Objective-C响应ToSelector

根据我到目前为止所学到的:在Objective-C中,您可以向任何对象发送任何消息.如果对象确实实现了正确的方法,那么它将被执行,否则不会发生任何事情.这是因为在发送消息之前,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"];
}
Run Code Online (Sandbox Code Playgroud)

但是当我实际发送setAlternateTitle消息时,程序将崩溃,我不确定为什么.它不应该在发送消息之前执行respondsToSelector吗?

cocoa objective-c

19
推荐指数
2
解决办法
3万
查看次数

标签 统计

cocoa ×1

objective-c ×1