web-dev-qa-db-fra.com

iOS 10, NSUserDefaults ne fonctionne pas

J'essaie d'écrire/lire les valeurs de/depuis [NSUserDefaults standardUserDefaults], mais cela ne semble pas fonctionner. Mon code est:

[[NSUserDefaults standardUserDefaults] setObject:@"sampleString" forKey:@"sampleKey"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSString *defaultsValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"sampleKey"];
return defaultsValue;

Ce code renvoie nil, pour le simulateur Xcode 8.0 beta et iPhone 6s (10.0) . Cependant, il renvoie sampleString pour le simulateur Xcode 8.0 beta et iPhone 6s (9.1)

Je teste mon application avec les nouveaux systèmes. Est-ce que je fais quelque chose de mal? Ou existe-t-il une solution de contournement pour cela? Ou est-ce juste un problème "beta"?

17
antonio

Je viens d'avoir le même problème. Il semble y avoir un problème avec NSUserDefaults lors de la première exécution du simulateur iOS8 ou 9, puis du simulateur iOS10. Le redémarrage du mac a résolu le problème pour moi.

25
b_ray

Il s'agissait d'un bogue lié au simulateur iOS fourni avec Xcode 8 Beta 1. Ce problème a été résolu dans la version bêta 2:

Résolu dans Xcode 8 beta 2 - IDE

Simulateur

  • NSUserDefaults fonctionne correctement dans le simulateur iOS 10, que vous ayez ou non précédemment démarré le simulateur iOS 8 ou iOS 9. (25974372) 

Notes de publication de Xcode 8 Beta 2

Effectuez une mise à jour vers Xcode 8 Beta 2 pour éviter de devoir redémarrer votre hôte Mac à chaque fois.

5
JAL

Mettre à jour:

Si la protection des données est activée, synchronize peut également échouer lorsqu'une application entre en arrière-plan.


Nous avons ce problème sur un périphérique real sous iOS 10.1.1. L'ancienne valeur peut être lue, mais les nouvelles modifications ne peuvent pas être sauvegardées sur le disque. La méthode synchronize échoue toujours.

Redémarrer l'appareil peut résoudre ce problème.

3
BB9z

Je viens d'avoir le même problème. Il semble y avoir un problème avec NSUserDefaults lors de la première exécution du simulateur iOS8 ou 9, puis du simulateur iOS10. Le redémarrage du Mac a résolu le problème pour moi .. Shareeditflag Confirmé. Fermer et réouvrir le simulateur n'a pas fonctionné, mais le redémarrage a résolu le problème.

Selon Apple ( Apple link ) WWDC Seed: L'exécution de plusieurs simulateurs iOS peut empêcher NSUserDefaults de fonctionner. L'exécution d'un simulateur iOS 8 ou 9 suivi d'un simulateur iOS 10 entraîne l'arrêt de NSUserDefaults. Cela peut être contourné en redémarrant le Mac hôte.

1
wg_hjl