Цель C: Как установить ключ в NSUserDefault - PullRequest
6 голосов
/ 09 июня 2011

Я пытаюсь сохранить информацию в NSUserdefault.Я намерен показать всплывающее сообщение пользователю, если он запускает приложение в первый раз.Мой код выглядит следующим образом:

//In my view did load method
self.prefs = [NSUserDefaults standardUserDefaults];
self.firstTimeLaunchingApp = [prefs integerForKey:@"firstTimeLaunchx"];
[self tableRefresh];

//This method is called after the refresh button is clicked
-(void)tableRefresh
{
    [self displayFirstTimeMessage];

    //Other codes ommited
}


//Method to display pop up if first time user
-(void) displayFirstTimeMessage
{
    if (self.firstTimeLaunchingApp != 1 ) 
    {
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Welcome!" 
                                                   message:@"Thanks for using the app!"
                                                  delegate:nil
                                         cancelButtonTitle:@"OK"
                                         otherButtonTitles:nil];

        [alert show];
        [alert release];

        [prefs setInteger:1 forKey:@"firstTimeLaunchx"]; 
        [prefs synchronize];
    }

}

Проблема, с которой я здесь сталкиваюсь, заключается в том, что при первом запуске приложения появляется всплывающее окно с предупреждением (как и ожидалось), однако, когда я нажимаю кнопку обновления (который снова вызовет «displayFirstTimeMessage»), я все еще вижу всплывающее окно с предупреждением, которое не соответствует ожидаемому.Что-то не так с тем, как я устанавливаю ключ для NSUserDefault?

Примечание. Если я остановлю и перезапущу приложение, всплывающее окно не появится.

1 Ответ

11 голосов
/ 09 июня 2011

self.firstTimeLaunchingApp в инициализировано в viewDidLoad. После сохранения ключа вы не обновили его значение. Поэтому, когда метод вызывается снова, его значение не равно 1. Он по-прежнему содержит значение, которое было прочитано ранее. Нет проблем в сохранении, так как после повторного запуска вы не видите предупреждение. Сделайте это:

[prefs setInteger:1 forKey:@"firstTimeLaunchx"]; 
[prefs synchronize];

// add this line
self.firstTimeLaunchingApp = [prefs integerForKey:@"firstTimeLaunchx"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...