我有以下代码。但是,行
stepper.value = [NSNumber numberWithDouble:loadNumber];
错误错误'将NSNumber *__strong
发送到不兼容类型的参数'double''。我认为步进器只接受双倍,但我不确定我设置它的错误。
我需要做的是: -
1)在NSUserDefaults
中为saveNumber
设置一个默认值,该值将在用户进行变更之前使用。
2)在显示加载或视图时,使用saveNumber
设置stepper.value
和myLabel
的值。
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”。
有什么想法吗?
答案 0 :(得分:2)
此:
stepper.value = [NSNumber numberWithDouble:loadNumber];
需要:
stepper.value = [loadNumber doubleValue];
在synchronize
中设置值后,您无需致电NSUserDefaults
。
存储在NSUserDefaults
中的值可以从任何类访问,而不仅仅是设置它的类。
更新
要设置默认值,您需要以下内容:
NSDictionary *defaults = @{ @"saveNumber": @6 };
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
这会为6
设置默认值@"saveNumber"
。