92 votes

Comment utiliser un booléen dans NSUserDefaults

Lorsque l' rootViewController de mon application est chargée, je veux être en mesure de vérifier si oui ou non les utilisateurs identifiants de connexion ont été enregistrés à l' NSUserDefaults.

Fondamentalement, lorsque l'utilisateur charge la demande et qu'il/elle n'a pas ses informations de connexion enregistrées, modalAlertView sera poussé et l'utilisateur sera en mesure d'enregistrer leurs informations d'identification appropriée. Cela permet d'économiser ceux - UITextField des chaînes à une respectifs NSUserDefault objet. Cependant, est-il possible, que lorsque l'économie qui en est fait, je peux créer un NSUserDefault objet qui est un booléen et modifiez la valeur d'un oui?

Ce qui signifie que le booléen est déjà définie sur non, et lorsque l'utilisateur enregistre leurs informations d'identification de connexion, il modifie également le booléen pour un oui?

Merci!

269voto

Henrik P. Hessel Points 22046

Vous pouvez définir votre booléen en utilisant:

 [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"logged_in"];
 

et le lire en utilisant ce code:

 if(![[NSUserDefaults standardUserDefaults] boolForKey:@"logged_in"]) {
    [self displayLogin];
} else {
    [self displayMainScreen];
}
 

11voto

James Huddleston Points 5061

Il existe une méthode en NSUserDefaults appelés registerDefaults:. Vous utilisez cette méthode pour définir l'application par défaut pour les paramètres par défaut." En gros, vous créez un NSDictionary contenant vos clés par défaut et les valeurs (dans votre cas PAS pour une "informations enregistrées" la clé), et de vous inscrire à l'aide de registerDefaults:. Ce si souvent fait en application du délégué + (void)initialize méthode pour vous assurer que vos paramètres par défaut sont enregistrés avant qu'ils sont nécessaires. Ces valeurs ne servent si votre application n'a pas été remplacés. En d'autres termes, ils ne sont pas être utilisés à moins que la clé que vous recherchez n'est pas dans le Domaine d'Application, c'est à dire, l'utilisateur par défaut de lecture de l'utilisateur .fichier plist.

D'autre part, vous avez juste à vérifier les informations d'identification de connexion et affiche une alerte si elles sont manquantes. Ceci élimine le besoin pour garder votre valeur booléenne synchronisées avec les informations d'identification de connexion. Si plus tard vous fournir un "supprimer les informations d'identification de connexion" la capacité, vous n'aurez pas à n'oubliez pas de régler le booléen NE. Si vos identifiants sont enregistrés de l'utilisateur par défaut, vous devrez faire cela:

NSString *userID = [[NSUserDefaults standardUserDefaults] stringForKey:@"userID"];
NSString *password = [[NSUserDefaults standardUserDefaults] stringForKey:@"password"];
if (userID != nil && password != nil) {
    // Code to log user in
} else {
    // Code to pop up an alert
}

7voto

Shiim Points 74

Cette solution, proposée par Henrik P. Hessel:

 if(![[NSUserDefaults standardUserDefaults] boolForKey:@"logged_in"]) {
[self displayLogin];
} else {
[self displayMainScreen];
}
 

fonctionnerait dans votre cas, mais gardez à l'esprit que vous ne devriez pas vérifier avec ce code si une clé est définie, car si elle est définie et définie sur "NON", vous obtiendrez toujours un résultat comme s'il ne l'était pas. mettre du tout. J'utiliserais plutôt

 if([[NSUserDefaults standardUserDefaults] objectForKey:@"logged_in"] == nil) {
    //Do something
}
 

2voto

Toastor Points 6052

Vous n'avez pas besoin de le définir d'abord sur NO , vous pouvez plutôt vérifier si une clé a déjà été définie. Sinon, et si votre application détermine que les informations d'identification sont complètes, créez-la et définissez-la sur YES .

Vérifiez ma réponse à une autre question pour voir comment je le fais habituellement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X