0

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

要节省退出:

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

非常感谢,

斯图

4

3 回答 3

1

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

于 2010-04-18T21:48:26.683 回答
1

您可以对值进行硬编码并将其取回这一事实意味着问题肯定围绕您label.textNSUserDefaults.

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

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

于 2010-04-19T16:17:18.747 回答
0

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

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

确保你传递了类似@“13.2”的东西。检查这一点的最佳方法是在创建变量保存后立即调用 NSLog 调用。

于 2010-04-18T20:47:35.593 回答