6

我在我的设置中使用 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];
    }
.....

}

4

2 回答 2

2

确保保存数据的最佳方法是在应用程序委托中包含对-synchronizeinapplicationWillTerminate:和 in的调用。applicationWillResignActive:

编辑:

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

于 2012-07-16T14:54:45.353 回答
1

我看不出有什么理由。

您是否检查了 Simulator 目录,在 Library/Caches 下有保存 NSUserDefaults 的 plist。检查是否写入正确。

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

于 2012-07-16T14:44:20.547 回答