iOS : NSUserDefaults에서 부울 사용
때 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
}
먼저로 설정할 필요가 없습니다 NO
. 대신 키가 설정되어 있는지 확인할 수 있습니다. 그렇지 않은 경우 앱에서 자격 증명이 완료되었다고 판단하면 생성하고 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()
}
스위프트 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()
}
참고 URL : https://stackoverflow.com/questions/3841166/ios-use-a-boolean-in-nsuserdefaults
'IT story' 카테고리의 다른 글
파이썬에서 'false'를 0으로, 'true'를 1로 변환하는 방법 (0) | 2020.09.10 |
---|---|
Java 8에서 UTC + 0 날짜를 얻는 방법은 무엇입니까? (0) | 2020.09.10 |
바이트에서 특정 비트 가져 오기 (0) | 2020.09.10 |
Symfony2 컨트롤러에서 JSON 응답을 어떻게 보낼 수 있습니까? (0) | 2020.09.10 |
C #에서 Windows Forms 양식을 닫는 Esc 단추 (0) | 2020.09.10 |