NSUserDefaults не будет сохраняться постоянно - PullRequest
0 голосов
/ 15 июня 2011

У меня довольно простое приложение для iPhone, которое я делаю. Тем не менее, я не могу получить свои NSUserDefaults для постоянного сохранения. Запись и получение данных не является проблемой - я могу сохранить данные (в моем случае - строку) и получить их по команде, даже после переключения представлений, закрытия / открытия приложения и т. Д., И данные извлекаются просто хорошо. Похоже, что строка была правильно сохранена на ключ. Но когда я покидаю приложение из панели многозадачности и перезагружаю его, настройки больше не сохраняются, и приложение загружается, как в первый раз. Я начинающий программист, так что это, вероятно, просто глупая ошибка с моей стороны.

Вот как выглядит экономия:

if (optionsSoundBox.center.x >= 240)
    {
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:.2];
        self.soundOnLabel.alpha = 1;
        self.soundOffLabel.alpha = 0;
        [UIView commitAnimations];

        NSUserDefaults *soundOptions = [NSUserDefaults standardUserDefaults];
        [soundOptions setObject:@"SoundsON" forKey:@"SoundKey"];
        [soundOptions synchronize];
    }

    if (optionsSoundBox.center.x < 240)
    {
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:.2];
        self.soundOnLabel.alpha = 0;
        self.soundOffLabel.alpha = 1;
        [UIView commitAnimations];

        NSUserDefaults *soundOptions = [NSUserDefaults standardUserDefaults];
        [soundOptions setObject:@"SoundsOFF" forKey:@"SoundKey"];
        [soundOptions synchronize];
    }

Я извлекаю строку в viewDidLoad, поэтому она будет готова при запуске, например:

NSUserDefaults *soundOptions = [NSUserDefaults standardUserDefaults];
    NSString *savedSoundSettings = [soundOptions stringForKey:@"SoundKey"];

    if (savedSoundSettings == @"SoundsON")
    {
        [optionsSoundBox setCenter:CGPointMake(280, optionsSoundBox.center.y)];
    }

    if (savedSoundSettings == @"SoundsOFF")
    {
        [optionsSoundBox setCenter:CGPointMake(200, optionsSoundBox.center.y)];
    }

Я очень ценю любую помощь, которую вы можете оказать

Ответы [ 3 ]

1 голос
/ 15 июня 2011

А также потому, что вы получаете stringForKey: вместо objectForKey:

Может быть, вам будет проще, если вы просто используете [[NSUserDefaults standardUserDefaults] setBool: YES forKey: @"SoundsON"];, а затем проверьте, является ли boolForKey: @"SoundsON" истинным.

0 голосов
/ 15 июня 2011

Вы должны использовать [savedSoundSettings isEqualToString:@"SoundsON"] вместо использования оператора двойного равенства.(==).

Кроме того, это может быть тот факт, что вы запускаете этот код внутри viewDidLoad.Попробуйте вместо этого запустить его внутри viewWillAppear.

Наконец, я рекомендую использовать имена верблюдов для ключей настроек, чтобы в дальнейшем было легче набирать текст.(Думайте soundsOn вместо SoundsON.)

0 голосов
/ 15 июня 2011

Вы не должны сравнивать строки с ==.Правильный способ сравнения строк - через isEqualToString:.Таким образом, ваши операторы if при извлечении пользовательских значений по умолчанию должны выглядеть следующим образом:

if ([savedSoundSettings isEqualToString:@"SoundsON"])
{
    ....
}

РЕДАКТИРОВАТЬ: Кроме того, концептуально все, что вы проверяете, это то, включена ли одна переменная состояния или нет.Таким образом, в идеале вы должны использовать что-то вроде [NSUserDefaults setBool:forKey:] и [NSUserDefaults boolForKey:].

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