Подтвердить что ты не робот

Почему NSUserDefaults не сохраняет мои значения?

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

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

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

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

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

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

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

4b9b3361

Ответ 1

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

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

[[NSUserDefaults standardUserDefaults] synchronize];



Добавление:

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

Ответ 2

Этот код отлично подходит для меня.

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];

if (standardUserDefaults) {
    [standardUserDefaults setObject:myString forKey:@"Prefs"];
    [standardUserDefaults synchronize];
}

Ответ 3

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

Ответ 4

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