【问题标题】:NSUserDefaults: Saved Number Always 0, iPhoneNSUserDefaults:保存的数字始终为 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 现在被击中。

标签: iphone objective-c load save nsuserdefaults


【解决方案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,没有百分号,仍然显示警报。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-22
  • 2013-04-03
  • 1970-01-01
  • 2023-03-10
  • 2014-01-09
  • 1970-01-01
  • 2011-08-15
相关资源
最近更新 更多