2011-12-28 3 views
1

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

ответ

2

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

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

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

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

Итак, я бы положил что-нибудь в viewDidLoad или просто оставил его пустым? –

+0

Ничего, я понял, что мне нужно делать. Спасибо за помощь. –

4

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

Так изменить код так:

Level1ViewController:

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

Можете ли вы принять, если это была проблема? Благодарю. –

0

Вы установка значения для двух различных ключей. Что вы ожидаете?

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

+0

К сожалению, levelRank и easyRank должны были быть одинаковыми. Я пытался сделать его более общим. Теперь он должен быть исправлен –

Смежные вопросы