NSUserDefaults не будет загружаться после выхода из приложения - PullRequest
1 голос
/ 29 декабря 2011

Я установил несколько NSUserDefaults в моем приложении, которые работают по большей части.NSUserDefaults вызывается из одного ViewController и реализуется в другом (например, в игре с выбором уровня).Кажется, это работает хорошо, пока пользователь не нажмет кнопку «Назад» на экране выбора уровня.Когда они пытаются вернуться на уровень select 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;

        }
    }
}

Level1ViewController:

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

Ответы [ 3 ]

4 голосов
/ 29 декабря 2011

Вам нужно вызвать [userDefaults синхронизировать] после установки значения для ключа. Автоматическая синхронизация происходит довольно редко, поэтому в этом случае, пока один завершает уровень, синхронизация еще не произошла.

Итак, измените ваш код следующим образом:

Level1ViewController:

{            
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setInteger:1 forKey:@"easyRank"];
    [userDefaults synchronize];
}
2 голосов
/ 29 декабря 2011

Ваша первая проблема - вы создаете экземпляр userDefaults, но не задаете никаких значений.Так что вызов synchronize на самом деле ничего не делает:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults synchronize];

После того, как вы установили Integer, вам нужно позвонить synchronize:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setInteger:1 forKey:@"easyRank"];
[userDefaults synchronize];
0 голосов
/ 29 декабря 2011

Вы устанавливаете значения для двух разных клавиш. Что вы ожидаете, чтобы случиться?

Либо Level1ViewController необходимо установить значение для levelRank, либо LevelSelectViewController необходимо прочитать значение для клавиши easyRank.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...