NSSlider事件未触发

时间:2011-01-09 18:33:52

标签: cocoa macos nsslider

我的NSSlider上有一个带有此代码的事件:

- (IBAction)optOndoorzichtigheidChange:(id)sender {
    NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
    NSString *opacity = [NSString stringWithFormat:@"%d",[optOndoorzichtigheidSlider value]];
    [defaults setObject:opacity forKey:@"opacity"];
    [mainWindow setAlphaValue:[optOndoorzichtigheidSlider doubleValue]];
    [defaults synchronize];
    [optOndoorzichtigheidLabel setStringValue:opacity];
    NSLog(@"fired");
}

但它没有触发,控制台发出此消息:2011-01-09 19:31:18.994 Nistract [1337:a0f] - [NSSlider value]:无法识别的选择器发送到实例0x100427400

3 个答案:

答案 0 :(得分:4)

方法正在执行。你刚刚崩溃,因为你正在尝试执行一个不存在的方法。

问题在于这一行:

NSString *opacity = [NSString stringWithFormat:@"%d",[optOndoorzichtigheidSlider value]];

NSSlider没有value方法。它有doubleValue方法,返回double

答案 1 :(得分:1)

您已经对滑块进行了硬编码。而不是像这样的呼叫

[optOndoorzichtigheidSlider intValue];

尝试使用sender

[sender intValue];

看起来你正在用这里的值更新标签

[optOndoorzichtigheidLabel setStringValue:opacity];

当您考虑使用Bindings时。

答案 2 :(得分:0)

现在我使用这段代码,似乎有效:

- (IBAction)optOndoorzichtigheidChange:(id)sender {
    NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
    NSString *opacity = [NSString stringWithFormat:@"%d",[optOndoorzichtigheidSlider intValue]];
    [defaults setObject:opacity forKey:@"opacity"];
    [[mainWindow animator] setAlphaValue:((double) [optOndoorzichtigheidSlider intValue] / 100)];
    [defaults synchronize];
    [optOndoorzichtigheidLabel setStringValue:opacity];
    NSLog(@"fired");
}