无法在 applicationDidFinishLaunching 中设置 NSSlider 值

Can't set NSSlider value in applicationDidFinishLaunching

我需要在 cocoa 应用程序的首选项 window 中设置一个滑块。

如果我像这样在 awakeFromNib 中设置 NSSlider

-(void)awakeFromNib{

[thresholdSlider setInValue:9];

}

首选项 window 在打开时更新为值。

虽然,因为它是首选项 window,我需要使用 NSUserDefault 注册值,所以当应用程序启动时会 运行 :

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{

[thresholdSlider setValue:[NSUserDefaults  standardUserDefaults] forKey:kthresh];
NSLog( @"%@",[thresholdSlider objectValue]);

}

但我什至无法在 applicationDidFinishLaunching 方法中设置滑块值

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{

[thresholdSlider setIntValue:9];

NSLog( @“%d”,[thresholdSlider intValue]);}

returns 0 并且滑块在首选项中设置为最小值(在 IB 中设置)window。

我在哪里可以调用 [thresholdSlider setValue:[NSUserDefaults standardUserDefaults] forKey:kthresh]; 以使用上次应用程序退出时的用户值更新滑块?

根据Vadian命题编辑的代码:

+(void)initialize{
NSDictionary *dicDefault = @{@"kthresh":@9};
[[NSUserDefaults standardUserDefaults]registerDefaults:dicDefault];}`

`- (void)applicationDidFinishLaunching:(NSNotification*)aNotification{   
  `//Preferences
NSInteger thresholdValue = [[NSUserDefaults standardUserDefaults] integerForKey:@"kthresh"];`

thresholdSlider.integerValue = thresholdValue;}`

`-(void)applicationWillTerminate:(NSNotification *)notification {
NSUserDefaults *defaults =  [NSUserDefaults standardUserDefaults];
[defaults setInteger:thresholdSlider.integerValue forKey:@"kthresh"];
[defaults synchronize];}` 

[thresholdSlider setValue:[NSUserDefaults standardUserDefaults] forKey:kthresh];

应该是

[thresholdSlider setObjectValue:[[NSUserDefaults standardUserDefaults] valueForKey:kthresh]];

尽快在 AppDelegate 中注册具有默认值的键值对。如果尚未将自定义值写入磁盘,则始终使用此值。

NSDictionary *defaultValues = @{@"kthresh" : @9};
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues];

然后根据需要设置滑块的值,考虑语法

NSInteger thresholdValue = [[NSUserDefaults standardUserDefaults] integerForKey:@"kthresh"];
thresholdSlider.integerValue = thresholdValue;

要将值写入磁盘,请使用此

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults] ;
[defaults setInteger:thresholdSlider.integerValue forKey:@"kthresh"];
[defaults synchronize];

Do not use setValue:forKey: and valueForKey: to talk to NSUserDefaults

或者使用 Cocoa 绑定并将键 integerValue 绑定到 Interface Builder 中的 NSUserDefaultsController 实例。