简体   繁体   English

离开应用程序后,NSUserDefaults将不会加载

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM