1

我正在尝试创建一个首选项窗口。
在其中我有一些复选框样式的 NSButton。setState:问题是当我调用该方法时它们没有更新。我访问了standarUserDefaults何时初始化窗口以获取它们应该处于的状态,并计划根据该键所处的状态来更改它们。

我知道他们实际上连接到他们的 IBOutlet 和 IBAction,因为我已经尝试了一些 NSLog-ing 来确保这一点。

我读了一些关于以编程方式更改模型属性的值的内容未反映在 此处的用户界面中,但我不确定这是否是问题所在,或者坦率地说他们在那里指的是什么。

我在 .h 文件中声明了检查按钮,如下所示:

IBOutlet NSButton *defaultDateCheck;
IBOutlet NSButton *closeOnCreationCheck;
IBOutlet NSButton *allowEmptyNumberCheck;
IBOutlet NSPopUpButton *defaultJobSetting;

init 方法如下所示:

-(id)initWithWindowNibName:(NSString *)windowNibName{

    self = [super initWithWindowNibName:windowNibName];

    if (self) {

        NSUserDefaults *myDefaults = [NSUserDefaults standardUserDefaults];

        [defaultDateCheck setState:[myDefaults boolForKey:@"useDefaultDate"]];

        [closeOnCreationCheck setState:[myDefaults boolForKey:@"closeOnCreation"]];

        [allowEmptyNumberCheck setState:[myDefaults boolForKey:@"allowEmptyProjectNumber"]];

        [defaultJobSetting selectItemAtIndex:[myDefaults integerForKey:@"defaultJob"]];
    }
    return self;
}

我还尝试了以下格式来设置复选框,但没有结果:

if ([myDefaults integerForKey:@"useDefaultDate"] == YES) {
    [defaultDateCheck setState:NSOnState];
}
else {
    [defaultDateCheck setState:NSOffState];
}

复选框的连接 IBAction 方法如下所示:

-(IBAction)toggleCloseOnCreation:(id)sender{
    [[NSUserDefaults standardUserDefaults] setBool:([closeOnCreationCheck state] == NSOnState) forKey:@"closeOnCreation"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}
4

2 回答 2

3

在 -viewDidLoad 方法中设置状态,因为在 -init 中视图及其子视图尚不存在

于 2012-04-04T16:09:30.533 回答
1

设置默认使用的值时:

[myDefaults setObject:[NSNumber numberWithBool:YES] forKey:@"YourKey"];

检查值是真还是假时,请使用:

[[[NSUserDefaults standardUserDefaults] objectForKey:@"YourKey"] boolValue]
于 2012-04-05T08:28:29.050 回答