iOS:在NSUserDefaults中使用布尔值

当我的应用程序的rootViewController加载时,我想能够检查用户login凭证是否已经保存到NSUserDefaults

基本上,当用户加载应用程序,他/她没有保存她的login凭证, modalAlertView将被推送,用户将能够适当地保存他们的凭据。 这将这些UITextFieldstring保存到相应的NSUserDefault对象。 然而,是否有可能,当这个保存完成时,我可以创build一个布尔值的NSUserDefault对象,并将值更改为是?

这意味着布尔值已经设置为no,并且当用户保存他们的login凭证时,它也将布尔值更改为yes?

你可以使用下面的方法设置布尔值:

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

并使用下面的代码读取它:

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

NSUserDefaults有一个名为registerDefaults:的方法registerDefaults: 您可以使用此方法设置应用程序的“默认默认值”。 基本上,你创build一个包含你的默认键和值的NSDictionary (在你的情况下,“保存凭据”键是NO),并使用registerDefaults:注册它。 这如果经常在应用程序委托的+ (void)initialize方法中完成,以确保您的默认值在需要之前被注册。 这些值只有在您的应用程序尚未replace它们时才会使用。 换句话说,除非您正在查找的密钥不在应用程序域中,否则它们将不会被使用,即用户默认从用户的.plist文件中读取。

另一方面,您可以检查login凭据,并在缺less警报时popup警告。 这消除了保持您的布尔值与login凭据同步的需要。 如果稍后提供“删除login凭据”function,则不必记得将布尔值设置为否。 如果您的login凭证保存在用户的默认值中,您可以这样做:

 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 } 

Henrik P. Hesselbuild议的解决scheme:

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

将在你的情况下工作,但要记住,如果某个键被设置了,你不应该检查这个代码,因为如果它被设置为“NO”,你仍然会得到一个结果,就好像没有设置在所有。 相反,我会使用

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

你不需要先将它设置为NO ,而是可以检查是否已经设置了一个键。 如果没有,并且您的应用程序确定凭据已完成,请创build它并将其设置为YES

检查我的答案另一个问题 ,看看我通常如何做到这一点。

在Swift 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() } 

Swift 2.3

存储值

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

获取值

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

Swift 3.0

存储值

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

检索值

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