使用NSUserDefaults杀死应用程序后保存的数据丢失

时间:2012-07-16 14:40:42

标签: ios nsuserdefaults

我在我的设置中使用NSUserDefaults。应用程序运行良好,即使我按下主页键让应用程序进入后台,但如果我杀了应用程序,NSUserDefaults中的数据保存将丢失。这是我的代码。我使用同步。 第一次初始化:

 if (![userDefaults integerForKey:
          kORFootageAirPlayModeKey])
    {
        [userDefaults setInteger:TRUE forKey:kORFootageAirPlayModeKey];
    }
    [userDefaults synchronize];

在viewController中读取值:

airPlayMode = [[NSUserDefaults standardUserDefaults]integerForKey:kORFootageAirPlayModeKey];

将其设置为动作:

- (IBAction)changeAirPlayStatus:(id)sender
{

    if (sender)
    {
        airPlayMode = [sender tag];

        [[NSUserDefaults standardUserDefaults] setInteger:airPlayMode forKey:kORFootageAirPlayModeKey];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }
.....

}

2 个答案:

答案 0 :(得分:1)

我没有理由这样做。

您是否已在Simulator目录中检查过,在Library / Caches下面有保存NSUserDefaults的plist。检查它是否写得正确。

请不要使用setInteger:TRUE。这在很多层面都是错误的。请改用setBOOL:YES。或者setInteger:1。

答案 1 :(得分:1)

确保保存数据的最佳方法是调用-synchronize中的applicationWillTerminate:和应用程序代表中的applicationWillResignActive:

编辑:

另外,steipete关于使用setInteger:TRUE的评论是准确的 - 使用setBool:YES代替。