NSUserDefaults. setValue fonctionne, Pas setBool
J'ai essayer de stocker certains paramètres dans NSUserDefaults, mais Il semble que l'application ne stocke pas le setBool valeurs.
Cela fonctionne:
[[NSUserDefaults standardUserDefaults] setValue: @"hello" forKey: @"test"];
[[NSUserDefaults standardUserDefaults] synchronize];
Quand j'ai quitter l'application et de la relancer, la valeur ont été enregistrées. Cependant, quand je fais ceci:
[[NSUserDefaults standardUserDefaults] setBool: YES forKey: @"test"];
[[NSUserDefaults standardUserDefaults] synchronize];
Il ne sera pas sauvegardé après je ferme l'application et la redémarrer.
Dois-je soumettre un rapport de bug, ou est-il quelque chose qui me manque ici?
Grâce
Edit:
Je me figure ce que j'ai fait de mal. Dans AppDelegate, je voulais vérifier si le boolForKey a été définie, et il n'a pas je l'ai fait:
if (![defaults boolForKey: @"test123"])
[defaults setBool: YES forKey: @"test123"];
... cependant, quand il s'agit de boolWithKey, le "!" il suffit de vérifier si le booléen est OUI ou non, si son néant.
OriginalL'auteur BlackMouse | 2012-03-06
Vous devez vous connecter pour publier un commentaire.
Comment pouvez-vous être sûr que sa ne fonctionne pas? J'ai essayé ton code et il fonctionne pour moi. Êtes-vous sûr que vous êtes la lecture de la Boolean dans le bon sens APRÈS vous l'écrire?
Ce code DEVRAIT fonctionner:
Depuis le NO est la valeur par défaut si elle n'est pas été définie. Le code ci-dessus ne permet pas de tester quoi que ce soit. Nous aurions besoin de l'essayer avec OUI pour le test à faire sens.
OriginalL'auteur Antonio MG
J'ai eu le même problème en ayant le code suivant dans mon AppDelegate de garder une trace de savoir si l'utilisateur avait vu un particulier viewController pour afficher une procédure pas à pas, et puis la définition de cette Bool PAS après que l'utilisateur l'a vu.
Mais alors, quand vous la définissez PAS plus tard, et de vérifier s'il "existe", vous êtes en train de voir le AUCUNE valeur booléenne et la valeur de retour de oui. Le quick fix est juste pour stocker la valeur booléenne dans une NSNumber objet, de sorte que vous pouvez vérifier pour son existence, indépendamment de sa valeur OUI ou NON. Voir ci-dessous:
OriginalL'auteur DanWebster
J'ai eu exactement le même problème. Tout, SAUF les Booléens ont été persistance correctement; mais j'ai été à l'aide de quelques vieux codage des styles à partir d'ios 3. recodé de cette façon, tout fonctionne.
Si quelqu'un d'autre est à l'aide de vieux livres.... voici un exemple
Mauvaises choses:
Bonnes choses:
Mise à jour: malheureusement, cela ne semblait fonctionner brièvement, et maintenant, c'est à défaut de nouveau... à l'aide de Xcode 4.5.2. peut-il vous suffit de changer bool pour les entiers...
OriginalL'auteur hangzhouharry
XCode 4.6 semble avoir le même problème mis en évidence par hangzhouharry. Une utile d'appel est [[NSUserDefaults standardUserDefaults] dictionaryRepresentation] pour voir si vos valeurs sont à la recherche de la façon dont ils le devraient.
Par exemple -> - autoLogout = 0;
qui a été défini comme un Bool, [paramètres boolForKey:@" - autoLogout"] renvoie rien
[paramètres integerForKey:@" - autoLogout"] renvoie la valeur 0 (comme une sorte de prévu)
OriginalL'auteur arcady bob