iOS:在NSUserDefaults中使用布尔值
当我的应用程序的rootViewController
加载时,我想能够检查用户login凭证是否已经保存到NSUserDefaults
。
基本上,当用户加载应用程序,他/她没有保存她的login凭证, modalAlertView
将被推送,用户将能够适当地保存他们的凭据。 这将这些UITextField
string保存到相应的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() }