无法在applicationDidFinishLaunching中设置NSSlider值

时间:2015-12-12 05:39:17

标签: objective-c cocoa nsuserdefaults preferences nsslider

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

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

-(void)awakeFromNib{

[thresholdSlider setInValue:9];

}

首选项窗口会在打开时使用值更新。

虽然,因为它是一个首选项窗口,我需要在NSUserDefault中注册Value,所以当启动时的应用程序运行时:

- (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]);}

返回0并在首选项窗口中将滑块设置为最小值(在IB中设置)。

在哪里可以调用[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];}` 

2 个答案:

答案 0 :(得分:1)

在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];
  

请勿使用setValue:forKey:valueForKey:NSUserDefaults

进行对话

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

答案 1 :(得分:0)

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

应该是

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