[英]NSUserDefaults will not load after leaving app
I set up multiple NSUserDefaults in my app that work for the most part. 我在我的应用程序中设置了多个NSUserDefaults,它们大部分都可以工作。 The NSUserDefaults are called from one ViewController and implemented at another (such as in a game with a level select). NSUserDefaults从一个ViewController调用,并在另一个ViewController上实现(例如在具有关卡选择的游戏中)。 This seems to work well, until the user presses the back button on the level select screen. 在用户按下级别选择屏幕上的“后退”按钮之前,这似乎工作得很好。 When they try to go back to the level select viewController, the NSUserDefaults are not loaded onto the screen. 当他们尝试返回选择viewController的级别时,NSUserDefaults不会加载到屏幕上。 Here is my code: 这是我的代码:
LevelSelectViewController: LevelSelectViewController:
- (void)viewDidLoad
{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults synchronize];
[super viewDidLoad];
}
- (void)Level1DidFinish:(Level1 *)controller
{
[self dismissModalViewControllerAnimated:YES];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSInteger rank = [userDefaults integerForKey:@"levelRank"];
{
if (rank == 1) {
button2.hidden = NO;
}
}
}
Level1ViewController: Level1ViewController:
{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setInteger:1 forKey:@"levelRank"];
}
You need to call [userDefaults synchronize] after setting a value for a key. 设置密钥值后,您需要调用[userDefaults同步]。 The automatic synchronization happens quite rarely, so in this case, while one completes a level, the sync won't have yet happened. 自动同步很少发生,因此在这种情况下,尽管完成一个级别,同步仍不会发生。
So modify your code like this: 因此,像这样修改您的代码:
Level1ViewController: Level1ViewController:
{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setInteger:1 forKey:@"easyRank"];
[userDefaults synchronize];
}
Your first issue is you are creating an instance of userDefaults
, but are not setting any values. 您的第一个问题是创建一个userDefaults
实例,但未设置任何值。 So calling synchronize
here is actually doing nothing: 因此,在此处调用synchronize
实际上无济于事:
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults synchronize];
After you set a your Integer
, then you need to call synchronize
: 设置Integer
之后,您需要调用synchronize
:
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setInteger:1 forKey:@"easyRank"];
[userDefaults synchronize];
You're setting values for two different keys. 您正在为两个不同的键设置值。 What are you expecting to happen? 您期望发生什么?
Either Level1ViewController
needs to set a value for levelRank
or LevelSelectViewController
needs to read the value for the easyRank
key. Level1ViewController
需要为levelRank
设置一个值,或者LevelSelectViewController
需要读取easyRank
键的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.