加载我的应用程序的rootViewController
时,我希望能够检查用户登录凭据是否已保存到NSUserDefaults
。
基本上,当用户加载应用程序并且他/她没有保存她的登录凭据时,将推送modalAlertView
并且用户将能够适当地保存他们的凭证。这将UITextField
字符串保存到相应的NSUserDefault
对象。但是,有可能,当这个保存完成后,我可以创建一个布尔值的NSUserDefault
对象并将值更改为是吗?
这意味着布尔值已经设置为no,并且当用户保存其登录凭据时,它还将布尔值更改为是?
您可以使用以下命令设置布尔值:
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"logged_in"];
[[NSUserDefaults standardUserDefaults] synchronize];
并使用此代码阅读:
if(![[NSUserDefaults standardUserDefaults] boolForKey:@"logged_in"]) {
[self displayLogin];
} else {
[self displayMainScreen];
}
在NSUserDefaults
有一种叫做registerDefaults:
的方法。您可以使用此方法设置应用程序的“默认默认值”。基本上,您创建一个包含默认键和值的NSDictionary
(在您的情况下为“已保存的凭据”键为NO),并使用registerDefaults:
进行注册。这通常在app delegate的+ (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
}
这个解决方案由Henrik P. Hessel建议:
if(![[NSUserDefaults standardUserDefaults] boolForKey:@"logged_in"]) {
[self displayLogin];
} else {
[self displayMainScreen];
}
可以在你的情况下工作,但请记住,如果设置了一些键,你不应该检查这个代码,因为如果它实际设置并设置为“NO”,你仍然会得到一个结果,好像不是完全没有。相反,我会用
if([[NSUserDefaults standardUserDefaults] objectForKey:@"logged_in"] == nil) {
//Do something
}
您不需要先将其设置为NO
,而是可以检查是否已设置密钥。如果没有,并且您的应用确定凭据已完成,只需创建它并将其设置为YES
。
检查my answer to another question,看看我通常如何做到这一点。
在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()
}
斯威夫特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()
}