52

您好我正在尝试使用NSUserDefaults在数据库中保存一些默认值。我能够将值保存在NSUserDefaults(甚至签入NSLog)中。现在,当应用程序重新启动时,我需要应用程序委托中的值。但我没有得到任何东西NSUserDefaults。以下是我班级中的代码,我将值保存在NSUserDefaults

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

            [prefs setObject:appDel.dictProfile forKey:@"dict"];
            NSLog(@"%@",[prefs valueForKey:@"dict"]);

以下是我来自 App Delegagte 的代码:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

NSLog(@"%@",[prefs valueForKey:@"dict"]);

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

4

4 回答 4

204

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

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

[[NSUserDefaults standardUserDefaults] synchronize];



附录:

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

于 2010-04-12T14:50:40.557 回答
10

这段代码对我来说很好。

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];

if (standardUserDefaults) {
    [standardUserDefaults setObject:myString forKey:@"Prefs"];
    [standardUserDefaults synchronize];
}
于 2012-01-16T12:04:54.443 回答
2

您没有说您是在设备上还是在模拟器中运行,但是如果您在模拟器中重新启动应用程序,如果您从 Xcode 启动,所有首选项将在两次启动之间重置。仅当您从模拟器本身重新启动时,才会保留首选项。

于 2010-04-12T14:46:42.477 回答
1

就我而言,我正在保存和检索一个字符串。当我在保存后同步然后在另一个线程中检索时,它无法正常工作。通过在保存之后和检索之前进行同步来解决该问题。

于 2014-06-09T19:56:55.720 回答