Почему NSUserDefaults не сохраняет мои значения? - PullRequest
52 голосов
/ 12 апреля 2010

Привет. Я пытаюсь использовать NSUserDefaults для сохранения некоторых значений по умолчанию в базе данных. Я могу сохранить значения в NSUserDefaults (даже проверил в NSLog). Теперь мне нужны значения в делегате приложения при перезапуске приложения. Но я ничего не получаю в NSUserDefaults. Ниже приведен мой код из моего класса, где я сохраняю значения в NSUserDefaults:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

            [prefs setObject:appDel.dictProfile forKey:@"dict"];
            NSLog(@"%@",[prefs valueForKey:@"dict"]);

Ниже приведен мой код из приложения Delegagte:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

NSLog(@"%@",[prefs valueForKey:@"dict"]);

код выше всегда возвращает мне ноль. Может кто-нибудь, пожалуйста, помогите мне?

Ответы [ 4 ]

202 голосов
/ 12 апреля 2010

Если вы закрываете свое приложение, нажимая кнопку «домой» (в симуляторе или на устройстве), ваш NSUserDefaults будет сохранен.

Если вы закроете свое приложение, нажав «Стоп» в XCode (в симуляторе или на устройстве), ваш NSUserDefaults может быть сохранен, но есть большая вероятность, что они не будут. NSUserDefaults периодически сохраняет любые изменения, и если вы прекратите процесс до того, как они будут сохранены, они пропадут. Вы можете принудительно сохранить вызов, позвонив по номеру:

[[NSUserDefaults standardUserDefaults] synchronize];



Добавление:

В iOS4 (этот ответ был изначально написан, когда iOS3 была публичной версией), ваш NSUserDefaults может не сохраниться при нажатии кнопки «Домой». Вызов [[NSUserDefaults standardUserDefaults] synchronize] в applicationDidEnterBackground: вручную должен гарантировать, что ваш NSUserDefaults сохранен правильно (это действительно должно быть встроенное поведение IMO).

11 голосов
/ 16 января 2012

Этот код отлично работает для меня.

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];

if (standardUserDefaults) {
    [standardUserDefaults setObject:myString forKey:@"Prefs"];
    [standardUserDefaults synchronize];
}
2 голосов
/ 12 апреля 2010

Вы не сказали, работаете ли вы на устройстве или в симуляторе, но если вы перезапустите приложение в симуляторе, все настройки будут сброшены между запусками при запуске из Xcode.Настройки будут сохранены только при повторном запуске с самого симулятора.

1 голос
/ 09 июня 2014

В моем случае я сохранял и извлекал строку. Когда я синхронизировался после сохранения, а затем был извлечен в другом потоке, он не работал должным образом. Проблема была решена путем синхронизации как после сохранения, так и перед извлечением.

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