我正在尝试创建一个首选项窗口。
在其中,我有一些复选框样式的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视图中及其子视图尚不存在