为什么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,它不能正常工作。 这个问题是通过在保存之前和撤回之前同步来解决的。