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

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

我读到一些有关以编程方式更改模型属性的值的信息,但未反映在用户界面here中,但我不确定这是问题所在还是坦率地说它们在此引用的内容。

我在.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];
}

最佳答案

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

09-27 23:20
查看更多