0

我有以下代码。然而,线

stepper.value = [NSNumber numberWithDouble:loadNumber];

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

我需要实现的是以下几点: -

NSUserDefaults1) 在for中设置一个默认值saveNumber,直到用户做出更改为止。

2) 在加载或视图出现时,用于saveNumber设置 和 的stepper.valuemyLabel

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

谁能告诉我哪里出错了,请帮助纠正我的代码?

此外,我刚刚意识到,在最终的应用程序中,我将在不同的 viewController 上进行此设置,而不是使用NSUserDefaultssavedNumber 值的那个。考虑到这一点,您能否让我知道如何确保 savedNumber 不仅可用于此视图控制器,而且可用于我需要这些值的任何其他视图控制器?

非常感谢。

- (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”。

有任何想法吗?

4

1 回答 1

2

这个:

stepper.value = [NSNumber numberWithDouble:loadNumber];

需要是:

stepper.value = [loadNumber doubleValue];

并且您不需要synchronize在设置值后调用NSUserDefaults.

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

更新:

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

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

这将设置默认值6for @"saveNumber"

于 2013-12-20T16:39:23.923 回答