NSUserDefaults:保存号码总是0,iPhone

时间:2010-04-18 20:21:18

标签: iphone objective-c load save nsuserdefaults

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

保存退出:

- (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模拟器上测试它。

非常感谢,

斯图

3 个答案:

答案 0 :(得分:1)

确保您的applicationWillTerminate:实施位于您的app委托类中。

答案 1 :(得分:1)

您可以对值进行硬编码并将其取回,这意味着问题肯定围绕您与label.text的互动,而不是您使用NSUserDefaults

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

尝试的另一件事是获取实际文本而不是要求操作系统首先将文本值转换为数字。如果你打印出来,你可能会得到一些关于发生了什么的线索。

答案 2 :(得分:0)

我的猜测是标签中的文字不是有效的双重值。来自Apple docs for NSString -doubleValue:

  

如果接收者没有,则返回0.0   以有效的文本表示开头   一个浮点数。

确保你传递的东西像@“13.2”。检查此问题的最佳方法是在创建变量save之后立即粘贴NSLog调用。