【问题标题】:NSUserDefaults doesn't save after app quits应用退出后 NSUserDefaults 不保存
【发布时间】:2015-10-08 17:59:08
【问题描述】:

当我退出应用程序时,存储在 NSUserDefaults 中的值不会被保存。我保存了这样的值:

[[NSUserDefaults standardUserDefaults] setValue:@"enabled" forKey:@"notifications"];
[[NSUserDefaults standardUserDefaults] synchronize];

即使在应用退出后,如何使用 NSUserDefaults 存储内容?

这就是我检索值的方式:

[[NSUserDefaults standardUserDefaults] valueForKey:@"notifications"]

前两行确实会运行,因为我让它们在按下按钮时运行。当我转到另一个视图并返回带有按钮的视图时,它会返回我设置的值。

我知道出了什么问题。我在第一个视图中有这段代码,并假设它工作正常:

NSUserDefaults *Def = [NSUserDefaults standardUserDefaults];
NSString *Ver = [Def stringForKey:@"Version"];
NSString *CurVer = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleVersionKey];
if(Ver == nil || [Ver compare:CurVer] != 0)
{
    if(Ver == nil)
    {
        [[NSUserDefaults standardUserDefaults] setValue:@"disabled" forKey:@"notifications"];
    }
}

【问题讨论】:

  • 你在 setValue 中的值在哪里?现在,您将其设置为字符串“启用”。你怎么称呼它?
  • 应用程序何时退出,以及与该代码运行相关的方式(您确定它确实运行了)?
  • nsuserdefaults的“notifications”键的打印输出是什么?
  • 使用这个:NSLog("%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"notifications"]);你能告诉我它打印的是什么吗?
  • 该日志打印“启用”

标签: ios objective-c nsuserdefaults


【解决方案1】:

你使用了错误的方法。

valueForKeysetValue:forKey: 是属于Key Value Coding 的方法,与在NSUserDefaults 中设置您的持久数据无关。

你需要阅读你的价值观

[[NSUserDefaults standardUserDefaults] objectForKey:@"notifications"];

和写作

[[NSUserDefaults standardUserDefaults] setObject:@"enabled" forKey:@"notifications"];

【讨论】:

  • 应用退出后不保存。
  • @somepers 我没有在我的回答中包含这个,但是如果你在设置新对象后立即终止应用程序,你仍然需要同步调用(即在默认值有机会之前自动同步)。
  • 如果您在模拟器中进行测试,我注意到如果您停止调试或退出模拟器,NSUserDefaults 不会保存。而是先用Cmd+Shift+H返回模拟器跳板,然后停止调试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-12
  • 1970-01-01
  • 1970-01-01
  • 2014-09-29
  • 2015-09-24
相关资源
最近更新 更多