iOS UIStepper& NSUserDefaults - 如何一起管理它们并使用double

时间:2013-12-20 16:36:59

标签: ios double nsuserdefaults uistepper

我有以下代码。但是,行

stepper.value = [NSNumber numberWithDouble:loadNumber];

错误错误'将NSNumber *__strong发送到不兼容类型的参数'double''。我认为步进器只接受双倍,但我不确定我设置它的错误。

我需要做的是: -

1)在NSUserDefaults中为saveNumber设置一个默认值,该值将在用户进行变更之前使用。

2)在显示加载或视图时,使用saveNumber设置stepper.valuemyLabel的值。

3)确保使用步进器更改时,值会在myLabel中更新,NSUserDefaults saveNumber也会更新。

有人可以告诉我哪里出错了,请帮忙纠正我的代码吗?

此外,我刚刚意识到在最终的应用程序中,我将在不同的viewController上使用此设置来使用NSUserDefaults savedNumber值。考虑到这一点,您是否也可以让我知道如何确保savedNumber不仅可用于此viewController,还可用于我需要值的任何其他值?

非常感谢。

- (void)viewWillAppear:(BOOL)animated
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSNumber *loadNumber = [defaults objectForKey:@"saveNumber"];
    self.myLabel.text = [NSString stringWithFormat:@"%@",loadNumber];
    UIStepper *stepper = [[UIStepper alloc] init];
    stepper.value = [NSNumber numberWithDouble:loadNumber];
}

- (IBAction)stepChanged:(id)sender {
    NSNumber *saveNumber = [NSNumber numberWithDouble:[(UIStepper *)sender value]];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:saveNumber forKey:@"saveNumber"];
    [defaults synchronize];
    self.myLabel.text = [NSString stringWithFormat:@"%@",saveNumber];
}

我有一个突出的问题是,如果没有设置任何值,我无法获得默认值!

我在AppDelegate.m中有以下代码: -

    NSDictionary *defaults = @{ @"saveNumber": @8 };
    [[NSUserDefaults standardUserDefaults] registerDefaults:defaults];

当应用程序首次启动时(以及每次使用步进器之后),看到的值为“null”。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

此:

stepper.value = [NSNumber numberWithDouble:loadNumber];

需要:

stepper.value = [loadNumber doubleValue];

synchronize中设置值后,您无需致电NSUserDefaults

存储在NSUserDefaults中的值可以从任何类访问,而不仅仅是设置它的类。

更新

要设置默认值,您需要以下内容:

NSDictionary *defaults = @{ @"saveNumber": @6 };
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];

这会为6设置默认值@"saveNumber"