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