【问题标题】:Saved data lost after kill app using NSUserDefaults使用 NSUserDefaults 杀死应用程序后保存的数据丢失
【发布时间】:2012-07-16 14:40:42
【问题描述】:

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

}

【问题讨论】:

    标签: ios nsuserdefaults


    【解决方案1】:

    确保您的数据得到保存的最佳方法是在您的应用程序委托中的applicationWillTerminate:applicationWillResignActive: 中包含对-synchronize 的调用。

    编辑:

    此外,steipete 关于使用 setInteger:TRUE 的 cmets 是准确的 - 请改用 setBool:YES。

    【讨论】:

      【解决方案2】:

      我看不出有什么原因。

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

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

      【讨论】:

      • 将 setInteger 更改为 setBOOL 后,一切正常。所以强制转换让ios疯狂。 plist 文件的位置在:/Users/apple/Library/Application Support/iPhone Simulator/5.1/Applications/xxxx-xxxxx-xxxxx/Library/Preferences/com.yourappname.plist
      猜你喜欢
      • 2012-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2017-05-24
      • 1970-01-01
      • 2021-04-10
      相关资源
      最近更新 更多