Objective c NSUserDefaults在离开应用程序后将不会加载

Objective c NSUserDefaults在离开应用程序后将不会加载,objective-c,ios,integer,nsuserdefaults,Objective C,Ios,Integer,Nsuserdefaults,我在我的应用程序中设置了多个NSUserDefaults,这些默认值大部分都可以使用。NSUserDefaults从一个ViewController调用,并在另一个ViewController中实现(例如在具有关卡选择的游戏中)。这似乎很有效,直到用户按下level select屏幕上的back按钮。当他们尝试返回到级别选择viewController时,NSUserDefaults不会加载到屏幕上。 这是我的密码: LevelSelectViewController: - (void)view

我在我的应用程序中设置了多个NSUserDefaults,这些默认值大部分都可以使用。NSUserDefaults从一个ViewController调用,并在另一个ViewController中实现(例如在具有关卡选择的游戏中)。这似乎很有效,直到用户按下level select屏幕上的back按钮。当他们尝试返回到级别选择viewController时,NSUserDefaults不会加载到屏幕上。 这是我的密码:

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;

        }
    }
}
{            
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setInteger:1 forKey:@"levelRank"];
}
{            
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setInteger:1 forKey:@"easyRank"];
    [userDefaults synchronize];
}
Level1ViewController:

- (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;

        }
    }
}
{            
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setInteger:1 forKey:@"levelRank"];
}
{            
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setInteger:1 forKey:@"easyRank"];
    [userDefaults synchronize];
}

设置密钥值后,需要调用[userDefaults synchronize]。自动同步很少发生,因此在这种情况下,当一个人完成一个级别时,同步不会发生

因此,请按如下方式修改代码:

Level1ViewController:

- (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;

        }
    }
}
{            
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setInteger:1 forKey:@"levelRank"];
}
{            
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setInteger:1 forKey:@"easyRank"];
    [userDefaults synchronize];
}

设置密钥值后,需要调用[userDefaults synchronize]。自动同步很少发生,因此在这种情况下,当一个人完成一个级别时,同步不会发生

因此,请按如下方式修改代码:

Level1ViewController:

- (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;

        }
    }
}
{            
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setInteger:1 forKey:@"levelRank"];
}
{            
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setInteger:1 forKey:@"easyRank"];
    [userDefaults synchronize];
}

第一个问题是您正在创建
userDefaults
的实例,但没有设置任何值。因此,在这里调用
同步
实际上什么都不做:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults synchronize];
设置
整数
后,需要调用
同步

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setInteger:1 forKey:@"easyRank"];
[userDefaults synchronize];

第一个问题是您正在创建
userDefaults
的实例,但没有设置任何值。因此,在这里调用
同步
实际上什么都不做:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults synchronize];
设置
整数
后,需要调用
同步

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setInteger:1 forKey:@"easyRank"];
[userDefaults synchronize];

您正在为两个不同的键设置值。你期望发生什么


Level1ViewController
需要为
levelRank
设置一个值,或者
LevelSelectViewController
需要读取
easyRank
键的值。

您正在为两个不同的键设置值。你期望发生什么


Level1ViewController
需要为
levelRank
设置一个值,或者
LevelSelectViewController
需要读取
easyRank
键的值。

对不起,levelRank和easyRank应该是相同的。我想让它更通用一些。现在应该修好了对不起,levelRank和easyRank应该是一样的。我想让它更通用一些。它现在应该被修复了,那么我会在viewDidLoad中放入任何内容还是将其留空?没关系,我知道我需要做什么。谢谢你的帮助。那么我会在viewDidLoad中输入任何内容还是将其留空?没关系,我已经知道我需要做什么了。谢谢你的帮助。