0

我有下面的代码,它使用步进器来设置 myLabel 的值。我将其设置为将值存储到 NSUserDefaults。

1)我还需要将步进值设置为与我放入标签的数字相同的数字。有人可以建议如何做到这一点吗?(我已经在我认为应该是的代码中添加了注释。)

2)我还想在加载 saveString 之前检查它是否实际设置,如果没有,请设置默认值。您能否建议如何实现这一目标?

谢谢。

- (void)viewWillAppear:(BOOL)animated
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *loadString = [defaults objectForKey:@"saveString"];
    self.myLabel.text = loadString;
// Need to set the stepper value to that in loadString
}

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

我已将代码更新如下:-

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

但是,行 'stepper.value = [NSNumber numberWithDouble:loadNumber];' 错误'发送'NSNumber *__strong'到不兼容类型'double''的参数的错误。我认为步进器只会接受一个double,但我不确定我做错了什么来设置它。

我需要实现以下目标:- 1) 在 NSUserDefaults 中为 saveNumber 设置一个默认值,在用户做出更改之前将使用该默认值。2) 在加载或视图出现时,使用 saveNumber 设置 stepper.value 和 myLabel 的值。3) 确保当使用步进器更改时,myLabel 中的值会更新,并且 NSUserDefaults saveNumber 也会更新。

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

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

非常感谢。

4

2 回答 2

1

关于问题 1:只需创建一个实例变量int stepper;(在您的 .h 中),然后viewWillAppear像现在一样设置此变量;并设置

stepper = [defaults integerForKey:@"stepper"];

在您的 IBAction 中只需调用

stepper++;
self.myLabel.text = [NSString stringWithFormat:@"%i",stepper];
and save it in your NSUserDefaults.

关于问题 2: NSUserDefaults 提供了为某些键注册默认值的可能性,看看这个:

NSDictionary *defaults = [NSDictionary dictionaryWithObjectsAndKeys:
                                @"test", @"key",
                                nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
于 2013-12-19T15:16:21.960 回答
0

如果 NSUserDefaults 中没有设置任何内容,则该objectForKey方法将返回nil,因此您loadString将是nil.

现在,您可以将保存的值从字符串转换为数字,例如[loadString floatValue];,但可能更好的方法是将 an 存储NSNumberuserDefaults具有正确值的 中,然后使用方法重新创建标签文本stringWithFormat

于 2013-12-19T15:18:08.130 回答