NSUserDefaults:保存的数字始终为 0,iPhone

Posted

技术标签:

【中文标题】NSUserDefaults:保存的数字始终为 0,iPhone【英文标题】:NSUserDefaults: Saved Number Always 0, iPhone 【发布时间】:2010-04-18 20:21:17 【问题描述】:

我查看了其他答案和文档。也许我错过了一些东西,或者我有另一个问题。我试图在退出应用程序时保存一个数字,然后在加载应用程序时我想检查该值是否存在并采取相应的措施。这是我尝试过的:

退出时节省:

- (void)applicationWillTerminate: (UIApplication *) application

 double save = [label.text doubleValue]; // This could be the issue

//double save = 3.5; // This works, it saves the value and loads it fine, so that is not the problem here.

 [[NSUserDefaults standardUserDefaults] setDouble: save forKey: @"savedNumber"];
 [[NSUserDefaults standardUserDefaults] synchronize]; 

检查:

- (IBAction)buttonclickSkip

 double save = [[NSUserDefaults standardUserDefaults] doubleForKey: @"savedNumber"];

 if (save == 0) 

    [self performSelector:@selector(displayAlert) withObject:nil];

    test.enabled = YES;
    test.alpha = 1.0;

    skip.enabled = NO;
    skip.alpha = 0.0;

   

 else 

 label.text = [NSString stringWithFormat:@"%.1f %%", save]; 



问题是我总是显示我的警报消息,保存的值没有放入标签中,所以不知何故 == 0 总是正确的。为什么会:

double save = [label.text doubleValue];

总是等于零?在我关闭应用程序之前,该标签中的数字大约是 0.5%(它会有所不同)。如果有什么不同,我正在 iPhone 模拟器上进行测试。

非常感谢,

学习

【问题讨论】:

applicationWillTerminate: 中设置断点。 label 的值是多少?是nil吗?正如 pheelick 所问,save 的价值是什么? 未达到断点。 applicationWillTerminate 在我的 apploadViewController.m 中……这是正确的吗? jlehr 在我的下一个问题上击败了我(以及为什么我要先询问更多信息) 我在问题中添加了一些新信息。 applicationWillTerminate 现在被击中。 【参考方案1】:

您可以对值进行硬编码并将其取回这一事实意味着问题肯定与您与label.text 的交互有关,而不是您对NSUserDefaults 的使用。

确保在您获取其值时该标签尚未被销毁。当应用程序终止时,它可能已经关闭了您从中获取值的视图。

要尝试的另一件事是获取实际文本本身,而不是要求操作系统先将文本值转换为数字。如果你把它打印出来,你可能会知道发生了什么。

【讨论】:

您关于标签已被销毁的理论似乎是正确的。现在工作。感谢所有帮助过的人!【参考方案2】:

确保您的 applicationWillTerminate: 实现在您的应用委托类中。

【讨论】:

我在问题中添加了一些新信息。 applicationWillTerminate 现在被击中。【参考方案3】:

我的猜测是标签中的文本不是有效的双精度值。来自 NSString -doubleValue 的 Apple 文档:

如果接收方没有,则返回 0.0 以有效的文本表示开始 浮点数。

确保您传递的内容类似于 @"13.2"。最好的检查方法是在创建变量 save 后立即调用 NSLog。

【讨论】:

嗯,这是我首先将值放入标签的行: label.text = [NSString stringWithFormat:@"%.1f %%", number];因此,实际标签包含像“12.7%”这样的数字 我将标签更改为 3.5,没有百分号,仍然显示警报。

以上是关于NSUserDefaults:保存的数字始终为 0,iPhone的主要内容,如果未能解决你的问题,请参考以下文章

在 NSUserDefaults 中保存复选标记 - 动态 TableView

无法保存到 iOS 7.0.2 上的 NSUserDefaults

告诉程序找不到保存数据时该怎么办 NSUserDefaults, iPhone

即使应用程序将被删除,如何在 NSUserDefaults 中保存数据?

无法从 NSUserDefaults 获取字典作为保存格式

如何快速将 NSIndexPath 添加到 NSUserDefaults