1

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

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

-(void)awakeFromNib{

[thresholdSlider setInValue:9];

}

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

不过,由于它是一个首选项窗口,我需要使用 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]);}

返回 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];}` 
4

2 回答 2

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实例。

于 2015-12-12T18:49:55.730 回答
0

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

应该

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

于 2015-12-12T12:42:02.697 回答