NSUserDefaults不会永久保存

时间:2011-06-14 20:24:05

标签: iphone objective-c xcode nsuserdefaults

我有一个相当简单的iPhone应用程序。但是,我无法永久保存我的NSUserDefaults。编写和检索数据不是问题 - 我可以保存数据(在我的情况下,一个字符串),并在命令中检索它,即使在切换视图,关闭/打开应用程序等之后,只检索数据精细。看起来好像字符串已正确保存到密钥中。但是当我从多任务托盘退出应用程序并重新启动它时,不再保存设置,应用程序就像第一次启动一样。我是一名新手程序员,所以这可能只是我的一个愚蠢的错误。

这是保存的样子:

if (optionsSoundBox.center.x >= 240)
    {
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:.2];
        self.soundOnLabel.alpha = 1;
        self.soundOffLabel.alpha = 0;
        [UIView commitAnimations];

        NSUserDefaults *soundOptions = [NSUserDefaults standardUserDefaults];
        [soundOptions setObject:@"SoundsON" forKey:@"SoundKey"];
        [soundOptions synchronize];
    }

    if (optionsSoundBox.center.x < 240)
    {
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:.2];
        self.soundOnLabel.alpha = 0;
        self.soundOffLabel.alpha = 1;
        [UIView commitAnimations];

        NSUserDefaults *soundOptions = [NSUserDefaults standardUserDefaults];
        [soundOptions setObject:@"SoundsOFF" forKey:@"SoundKey"];
        [soundOptions synchronize];
    }

我在viewDidLoad中检索字符串,因此它会在启动时就绪,就像这样:

NSUserDefaults *soundOptions = [NSUserDefaults standardUserDefaults];
    NSString *savedSoundSettings = [soundOptions stringForKey:@"SoundKey"];

    if (savedSoundSettings == @"SoundsON")
    {
        [optionsSoundBox setCenter:CGPointMake(280, optionsSoundBox.center.y)];
    }

    if (savedSoundSettings == @"SoundsOFF")
    {
        [optionsSoundBox setCenter:CGPointMake(200, optionsSoundBox.center.y)];
    }

我非常感谢你能给予的任何帮助

3 个答案:

答案 0 :(得分:1)

还因为你得到stringForKey:而不是objectForKey:

如果您刚刚使用[[NSUserDefaults standardUserDefaults] setBool: YES forKey: @"SoundsON"];然后检查boolForKey: @"SoundsON"是否为真,那么对您来说可能会更容易。

答案 1 :(得分:0)

您不应将字符串与==进行比较。比较字符串的正确方法是isEqualToString:。因此,检索用户默认值时的if语句应如下所示:

if ([savedSoundSettings isEqualToString:@"SoundsON"])
{
    ....
}

编辑:此外,从概念上讲,您要检查的是单个状态变量是ON还是OFF。因此,理想情况下,您应该使用[NSUserDefaults setBool:forKey:][NSUserDefaults boolForKey:]等内容。

答案 2 :(得分:0)

您应该使用[savedSoundSettings isEqualToString:@"SoundsON"],而不是使用double equals运算符。 (==)。

除此之外,可能是您在viewDidLoad内运行此代码。尝试在viewWillAppear内部运行它。

最后,我建议使用camelcase名称作为设置键,因此从长远来看更容易输入。 (请考虑soundsOn而不是SoundsON。)