Почему 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.
Может кто-нибудь мне помочь?
Ответы
Ответ 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
В моем случае я сохранял и извлекал строку. Когда я синхронизировался после сохранения, а затем возвращался в другой поток, он работал неправильно. Проблема была решена путем синхронизации как после сохранения, так и перед возвратом.