iOS: utiliser un booléen dans NSUserDefaults

Lorsque le rootViewController de mon application est chargé, je souhaite pouvoir vérifier si les identifiants de connexion des utilisateurs ont bien été enregistrés dans NSUserDefaults .

Fondamentalement, lorsque l’utilisateur charge l’application et que ses identifiants de connexion ne sont pas enregistrés, un modalAlertView sera modalAlertView et l’utilisateur pourra enregistrer ses informations d’identification de manière appropriée. Cela enregistre ces chaînes UITextField dans un object NSUserDefault respectif. Cependant, est-il possible que, lorsque cette sauvegarde est faite, je puisse créer un object NSUserDefault qui est un booléen et changer la valeur en un oui?

Ce qui signifie que le booléen est déjà défini sur no, et lorsque l’utilisateur enregistre ses identifiants de connexion, cela change également le booléen en un oui?

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

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

et lisez-le en utilisant ce code:

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

Il existe une méthode dans NSUserDefaults appelée registerDefaults: NSUserDefaults Vous utilisez cette méthode pour définir les “valeurs par défaut par défaut” de votre application. Fondamentalement, vous créez un NSDictionary contenant vos clés et valeurs par défaut (dans votre cas, un NO pour une clé “sauvegardée des identifiants”), et vous l’enregistrez en utilisant registerDefaults: NSDictionary Ceci est souvent effectué dans la méthode d’ + (void)initialize du délégué d’application pour s’assurer que vos parameters par défaut sont enregistrés avant qu’ils ne soient nécessaires. Ces valeurs ne sont utilisées que si votre application ne les a pas remplacées. En d’autres termes, ils ne seront utilisés que si la clé que vous recherchez n’est pas dans le domaine d’application, c’est-à-dire que les valeurs par défaut de l’utilisateur sont lues à partir du fichier .plist de l’utilisateur.

D’autre part, vous pouvez simplement vérifier les identifiants de connexion et afficher une alerte s’ils manquent. Cela évite de devoir synchroniser votre valeur booléenne avec les informations de connexion. Si vous fournissez plus tard une fonctionnalité de “suppression des identifiants de connexion”, vous n’aurez pas à vous souvenir de définir le booléen sur NO. Si vos identifiants de connexion sont enregistrés dans les parameters par défaut de l’utilisateur, procédez comme suit:

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

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

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

Cela fonctionnerait dans votre cas, mais gardez à l’esprit que vous ne devriez pas vérifier avec ce code si une clé est définie du tout, car si elle est définie et définie sur “NON”, vous obtiendrez quand même un résultat comme si ce n’était pas le cas. ensemble du tout. Au lieu de cela, j’utiliserais

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

Vous n’avez pas besoin de la définir d’abord sur NO . Au lieu de cela, vous pouvez vérifier si une clé a bien été définie. Si ce n’est pas le cas, et si votre application détermine que les informations d’identification sont complètes, créez-le et définissez-le sur YES .

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

dans Swift 3

 let Defaults = UserDefaults.standard()() let exists = Defaults.bool(forKey: "isLoggedIn") if !exists { displayLoginScreen() } else { print("value exists..do something") displayMainScreen() } 

alternativement on peut utiliser object(forKey:) puis le lancer sur bool

 if let exists = Defaults.object(forKey: "isLoggedIn"), let isLoggedIn = exists.boolValue where isLoggedIn == true { displayMainScreen() } else { displayLoginScreen() } 

Swift 2.3

Pour stocker des valeurs

  NSUserDefaults.standardUserDefaults().setBool(false, forKey: "logged_in") 

Pour récupérer des valeurs

  if NSUserDefaults.standardUserDefaults().boolForKey("logged_in") == true { dashboardScreen() }else { loginScreen() } 

Swift 3.0

Pour stocker des valeurs

  UserDefaults.standard().setBool(true, forKey: "logged_in") 

récupérer des valeurs

  UserDefaults.standard().bool(forKey: "logged_in"){ dashboardScreen() }else { loginScreen() }