iOS: use un booleano en NSUserDefaults

Cuando se rootViewController el rootViewController de mi aplicación, quiero poder verificar si las credenciales de inicio de sesión de los usuarios se han guardado en NSUserDefaults .

Básicamente, cuando el usuario carga la aplicación y no tiene guardadas sus credenciales de inicio de sesión, se modalAlertView un modalAlertView y el usuario podrá guardar sus credenciales de manera apropiada. Esto guarda esas cadenas UITextField en un objeto NSUserDefault respectivo. Sin embargo, ¿es posible que, cuando NSUserDefault este guardado, pueda crear un objeto NSUserDefault que sea booleano y cambie el valor a yes?

Lo que significa que boolean ya está establecido en no, y cuando el usuario guarda sus credenciales de inicio de sesión, ¿también cambia el valor booleano a sí?

Puede establecer su booleano usando:

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

y léelo usando este código:

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

Hay un método en NSUserDefaults llamado registerDefaults: Utiliza este método para establecer los “valores predeterminados predeterminados” de su aplicación. Básicamente, usted crea un NSDictionary contiene sus claves y valores predeterminados (en su caso, un NO para una clave de “credenciales guardadas”), y lo registra usando registerDefaults: Esto se hace a menudo en el método de + (void)initialize del delegado de la aplicación para garantizar que los valores predeterminados se registren antes de que sean necesarios. Estos valores solo se utilizan si su aplicación no los ha reemplazado. En otras palabras, no se usarán a menos que la clave que está buscando no se encuentre en el dominio de la aplicación, es decir, que el usuario haya leído por defecto el archivo .plist del usuario.

Por otro lado, puede verificar las credenciales de inicio de sesión y mostrar una alerta si faltan. Esto elimina la necesidad de mantener su valor booleano sincronizado con las credenciales de inicio de sesión. Si luego proporciona la capacidad de “eliminar credenciales de inicio de sesión”, no tendrá que recordar volver a establecer el valor booleano en NO. Si tus credenciales de inicio de sesión se guardan en los valores predeterminados del usuario, harías esto:

 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 } 

Esta solución, sugerida por Henrik P. Hessel:

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

funcionaría en su caso, pero tenga en cuenta que no debe verificar con este código si alguna tecla está configurada en absoluto, porque si realmente está configurada y configurada en “NO”, aún así obtendría un resultado como si no lo fuera establecido en absoluto. En cambio, usaría

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

No es necesario que primero lo configure en NO ; en su lugar, puede verificar si se ha establecido alguna tecla. De lo contrario, y si su aplicación determina que las credenciales están completas, solo créela y configúrela como YES .

Verifique mi respuesta a otra pregunta para ver cómo hago esto habitualmente.

en Swift 3

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

alternativamente, podemos usar object(forKey:) luego object(forKey:) a bool

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

Swift 2.3

Para almacenar valores

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

Para obtener valores

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

Swift 3.0

Para almacenar valores

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

para recuperar valores

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