iOS UIStepper 和 NSUserDefaults - 如何一起管理它们并使用双

标签 ios double nsuserdefaults uistepper

我有以下代码。然而,行

stepper.value = [NSNumber numberWithDouble:loadNumber];

错误“将 NSNumber *__strong 发送到不兼容类型‘double’的参数”。我认为步进器只会接受一个 double ,但我不确定我在设置它时做错了什么。

我需要实现的是:-

1) 在 NSUserDefaults 中为 saveNumber 设置一个默认值,在用户做出更改之前将一直使用该值。

2) 在出现加载或 View 时,使用saveNumber 设置stepper.valuemyLabel 的值。

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

任何人都可以告诉我哪里出错了,请帮助更正我的代码吗?

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

非常感谢。

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

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

有什么想法吗?

最佳答案

这个:

stepper.value = [NSNumber numberWithDouble:loadNumber];

需要:

stepper.value = [loadNumber doubleValue];

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

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

更新:

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

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

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

关于iOS UIStepper 和 NSUserDefaults - 如何一起管理它们并使用双,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20708074/

相关文章:

ios - 无法识别的选择器发送到实例 0x7fe098c09830

将 double 转换为 uint8_t*

ios - Objective-C 是否超时更改

ios - 自动调整 UITextView IOS7

ios - 初始化后不显示带有 Nib 的 UITableViewCell

C++ 保存/加载双(到/从文件)

python - 将 double 转换为 float

swift - 我尝试使用 UserDefaults 每次打开时都不会将分数重置为零,但它不起作用

ios - 在 Swift 3 中从 UserDefaults 读取存储数组时出现问题

ios - 图表库在滚动时滞后