为什么NSUserDefaults不保存我的值?

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

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

以下是我的代码从应用程序代表:

 NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; NSLog(@"%@",[prefs valueForKey:@"dict"]); 

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

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

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

 [[NSUserDefaults standardUserDefaults] synchronize]; 

附录:

在iOS4中(这个答案最初是在iOS3是公开发行的时候写的),当按下主页button时, NSUserDefaults可能不会被保存。 手动调用[[NSUserDefaults standardUserDefaults] synchronize] applicationDidEnterBackground:应确保您的NSUserDefaults正确保存(这应该是一个内置的行为IMO)。

这段代码适合我。

 NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; if (standardUserDefaults) { [standardUserDefaults setObject:myString forKey:@"Prefs"]; [standardUserDefaults synchronize]; } 

你没有说你是在设备还是在模拟器上运行,但是如果你在模拟器中重新启动应用程序,如果从Xcode启动,所有的优先级将在启动之间重新设置。 只有从模拟器本身重新启动才能保存首选项。

在我的情况下,我正在保存和检索一个string。 当我保存后同步,然后在另一个线程retrored,它不能正常工作。 这个问题是通过在保存之前和撤回之前同步来解决的。