때 rootViewController
내 응용 프로그램이로드, 나는 사용자의 로그인 자격 증명에 저장되어 있는지 여부를 확인할 수 있어야합니다 NSUserDefaults
.
기본적으로 사용자가 응용 프로그램을로드 할 때 로그인 자격 증명이 저장되지 않은 경우 a modalAlertView
가 푸시되고 사용자는 자격 증명을 적절하게 저장할 수 있습니다. 그러면 해당 UITextField
문자열이 각각의 NSUserDefault
개체에 저장 됩니다 . 그러나이 저장이 완료되면 NSUserDefault
부울 인 객체를 생성 하고 값을 yes로 변경할 수 있습니까?
부울이 이미 no로 설정되어 있으며 사용자가 로그인 자격 증명을 저장하면 부울도 yes로 변경됩니까?
답변
다음을 사용하여 부울을 설정할 수 있습니다.
[[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:
. + (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
}
답변
답변
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()
}
스위프트 3.0
값을 저장하려면
UserDefaults.standard().setBool(true, forKey: "logged_in")
값을 검색하려면
UserDefaults.standard().bool(forKey: "logged_in"){
dashboardScreen()
}else {
loginScreen()
}