[iphone] 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()
  }


답변