iOS:在NSUserDefaults中使用布尔值


88

rootViewController我的应用程序的加载,我希望能够检查是否将用户的登录凭据已保存到NSUserDefaults

基本上,当用户加载应用程序并且他/她没有保存她的登录凭据时,modalAlertView将被推送,并且用户将能够适当地保存其凭据。这会将那些UITextField字符串保存到相应的NSUserDefault对象中。但是,是否可以在完成保存后创建NSUserDefault一个布尔值对象并将其值更改为yes?

这意味着布尔值已经设置为no,并且当用户保存其登录凭据时,是否也将布尔值更改为yes?

Answers:


263

您可以使用以下方法设置布尔值:

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

[[NSUserDefaults standardUserDefaults] synchronize];

并使用以下代码阅读:

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

@Henril P。它可以显示先前登录的用户吗
Ajay

10

中有一种NSUserDefaults称为的方法registerDefaults:。您可以使用此方法设置应用程序的“默认默认值”。基本上,您将创建一个NSDictionary包含默认键和值(在这种情况下,“保存的凭据”键为NO)的,然后使用进行注册registerDefaults:。这通常是在应用程序委托的+ (void)initialize方法中执行的,以确保在需要默认值之前就对其进行注册。仅当您的应用未替换这些值时,才会使用这些值。换句话说,除非您要查找的密钥不在“应用程序域”中,即用户默认从用户的.plist文件读取,否则将不会使用它们。

另一方面,您可以只检查登录凭据并在缺少凭据时弹出警报。这样就无需保持布尔值与登录凭据同步。如果以后提供“删除登录凭据”功能,则无需记住将布尔值设置回NO。如果您的登录凭据保存在用户的默认设置中,则可以执行以下操作:

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
}

我该如何编写一种方法来检查登录凭据,如果未保存,则会弹出警报?
Sebastien Peek 2010年

4
您甚至都不应该考虑将密码存储在NSUserDefaults中。
2014年

6

Henrik P. Hessel建议的此解决方案:

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

可以在您的情况下使用,但是请记住,您根本不需要检查此代码是否设置了某些键,因为如果将其实际设置并设置为“ NO”,您仍然会得到结果,好像没有设置。相反,我会用

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

2

您不需要先将其设置为NO,而是可以检查是否已设置任何键。如果不是,并且您的应用确定凭据已完成,则只需创建它并将其设置为即可YES

检查我对另一个问题的回答,以查看我通常如何执行此操作。


0

在Swift 3中

let Defaults = UserDefaults.standard()()
let exists = Defaults.bool(forKey: "isLoggedIn")

if !exists {
   displayLoginScreen()            
} else {
   print("value exists..do something")
   displayMainScreen()       
}     

或者我们可以使用object(forKey:)然后将其转换为布尔

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

-1

迅捷2.3

储存价值

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

用于获取值

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

斯威夫特3.0

储存价值

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

检索值

  UserDefaults.standard().bool(forKey: "logged_in"){
      dashboardScreen()
  }else {
      loginScreen()
  }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.