为什么NSUserDefaults没有保存我的价值观?

pan*_*kaj 52 iphone nsuserdefaults

嗨,我想用来NSUserDefaults保存数据库中的一些默认值.我能够保存NSUserDefaults(甚至签入NSLog)中的值.现在,我需要重新启动应用程序时app delegate中的值.但是我没有得到任何东西NSUserDefaults.以下是我班上的代码,我将值保存在NSUserDefaults:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

            [prefs setObject:appDel.dictProfile forKey:@"dict"];
            NSLog(@"%@",[prefs valueForKey:@"dict"]);
Run Code Online (Sandbox Code Playgroud)

以下是来自App Delegagte的代码:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

NSLog(@"%@",[prefs valueForKey:@"dict"]);
Run Code Online (Sandbox Code Playgroud)

上面的代码总是返回null.有人可以帮帮我吗?

Nic*_*rge 204

如果您通过按主页按钮(在模拟器或设备上)终止您的应用程序,您的NSUserDefaults保存将被终止.

如果您通过在Xcode中按"停止"(在模拟器或设备上)终止您的应用程序,您NSUserDefaults 可能会得到保存,但他们很可能不会.NSUserDefaults定期保留任何更改,如果您在持久化之前终止该过程,它们将会消失.您可以通过调用强制保存:

[[NSUserDefaults standardUserDefaults] synchronize];
Run Code Online (Sandbox Code Playgroud)



附录:

在iOS4中(这个答案最初是在iOS3是公开发布时编写的),NSUserDefaults按下主页按钮时可能无法保存.手动调用[[NSUserDefaults standardUserDefaults] synchronize]applicationDidEnterBackground:应该确保你NSUserDefaults正确保存(这确实应该IMO内置的行为).

  • 我在应用程序中实现NSUserDefaults疯了。这解决了。非常感谢!!! (2认同)

Kan*_*sad 11

这段代码对我来说很好.

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];

if (standardUserDefaults) {
    [standardUserDefaults setObject:myString forKey:@"Prefs"];
    [standardUserDefaults synchronize];
}
Run Code Online (Sandbox Code Playgroud)

  • @Freney--这不会使他的回答更正确 (8认同)
  • 这个答案并没有真正为讨论添加任何内容; 代码片段已经可用于线程. (5认同)