91

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

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

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

4

6 回答 6

269

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

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

并使用以下代码阅读:

if(![[NSUserDefaults standardUserDefaults] boolForKey:@"logged_in"]) {
    [self displayLogin];
} else {
    [self displayMainScreen];
}
于 2010-10-01T16:34:44.707 回答
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
}
于 2010-10-01T16:41:58.167 回答
6

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

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

可以在您的情况下使用,但请记住,如果根本设置了某个键,则不应检查此代码,因为如果它实际上已设置并设置为“否”,您仍然会得到一个结果,就好像没有完全设置。相反,我会使用

if([[NSUserDefaults standardUserDefaults] objectForKey:@"logged_in"] == nil) {
    //Do something
}
于 2014-01-05T13:56:15.360 回答
2

您无需先将其设置为NO,而是可以检查是否已设置密钥。如果没有,并且您的应用程序确定凭据已完成,则只需创建它并将其设置为YES.

检查我对另一个问题的回答,看看我通常是怎么做的。

于 2010-10-01T16:37:48.413 回答
0

在斯威夫特 3

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

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

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

if let exists = Defaults.object(forKey: "isLoggedIn"), let isLoggedIn = exists.boolValue where isLoggedIn == true {
  displayMainScreen()
} else {
  displayLoginScreen() 
}
于 2017-01-05T08:24:16.263 回答
-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()
  }
于 2016-10-18T11:33:44.957 回答