Por que o NSUserDefaults não salva meus valores?

Oi eu estou tentando usar NSUserDefaults para salvar alguns valores padrão no database. Eu sou capaz de salvar os valores no NSUserDefaults (mesmo verificado no NSLog ). Agora preciso dos valores no delegado do aplicativo quando o aplicativo é reiniciado. Mas eu não estou recebendo nada no NSUserDefaults . A seguir está meu código da minha class, onde NSUserDefaults os valores em NSUserDefaults :

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

A seguir está meu código do App Delegagte:

 NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; NSLog(@"%@",[prefs valueForKey:@"dict"]); 

o código acima sempre me retorna nulo. Alguém por favor pode me ajudar?

Se você encerrar seu aplicativo pressionando o botão home (no Simulador ou no dispositivo), seus NSUserDefaults serão salvos.

Se você encerrar seu aplicativo pressionando “Parar” no Xcode (no Simulador ou no dispositivo), seus NSUserDefaults poderão ser salvos, mas há uma boa chance de que eles não sejam salvos. NSUserDefaults persiste quaisquer alterações periodicamente e, se você encerrar o processo antes que elas tenham sido persistidas, elas desaparecerão. Você pode forçar o salvamento chamando:

 [[NSUserDefaults standardUserDefaults] synchronize]; 

Termo aditivo:

No iOS4 (esta resposta foi originalmente escrita quando o iOS3 era o lançamento público), os NSUserDefaults não podem ser salvos ao pressionar o botão home. [[NSUserDefaults standardUserDefaults] synchronize] manualmente [[NSUserDefaults standardUserDefaults] synchronize] em applicationDidEnterBackground: deve garantir que seus NSUserDefaults sejam salvos corretamente (isso deve ser um comportamento IMO embutido).

Este código funciona bem para mim.

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

Você não disse se está sendo executado em um dispositivo ou no simulador, mas se você reiniciar o aplicativo no simulador, todas as preferências serão redefinidas entre as inicializações se você iniciar a partir do Xcode. As preferências só serão preservadas se você se reinicializar a partir do próprio simulador.

No meu caso eu estava salvando e recuperando uma string. Quando sincronizei depois de salvar e depois retratei em outro thread, ele não estava funcionando corretamente. O problema foi resolvido sincronizando os dois depois de salvar e antes de recuperar.