IOS: используйте логическое значение в NSUserDefaults

Когда загружается rootViewController моего приложения, я хочу проверить, были ли сохранены учетные данные пользователей в NSUserDefaults.

В принципе, когда пользователь загружает приложение и у него нет сохраненных учетных данных, будет нажата кнопка modalAlertView, и пользователь сможет сохранить свои учетные данные соответствующим образом. Это сохраняет те строки UITextField для соответствующего объекта NSUserDefault. Однако возможно ли, что когда это сохранение будет выполнено, я могу создать объект NSUserDefault, который является логическим, и изменить значение на yes?

Значит, что логическое значение уже установлено равным no, и когда пользователь сохраняет свои учетные данные для входа, он также изменяет логическое значение на yes?

Ответ 1

Вы можете установить логическое значение, используя:

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"logged_in"];

[[NSUserDefaults standardUserDefaults] synchronize];

и прочитайте его, используя этот код:

if(![[NSUserDefaults standardUserDefaults] boolForKey:@"logged_in"]) {
    [self displayLogin];
} else {
    [self displayMainScreen];
}

Ответ 2

В NSUserDefaults есть метод registerDefaults:. Этот метод используется для установки приложения "default defaults". В принципе, вы создаете NSDictionary, содержащий ваши ключи и значения по умолчанию (в вашем случае нет для ключа "сохраненные учетные данные" ), и вы регистрируете его с помощью registerDefaults:. Это, если это часто делается в приложении делегата + (void)initialize, чтобы убедиться, что ваши значения по умолчанию зарегистрированы до их необходимости. Эти значения используются только в том случае, если ваше приложение не заменило их. Другими словами, они не будут использоваться, если ключ, который вы ищете, не находится в домене приложений, то есть пользовательские значения по умолчанию считываются из файла .plist пользователя.

С другой стороны, вы можете просто проверить учетные данные для входа и вывести предупреждение, если они отсутствуют. Это устраняет необходимость сохранения булевского значения с учетными данными входа. Если позже вы укажете "удалить учетные данные для входа в систему", вам не нужно будет помнить о том, что boolean возвращается к НЕТ. Если ваши учетные данные для входа сохраняются в настройках пользователя по умолчанию, вы должны сделать это:

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
}

Ответ 3

Это решение, предложенное Хенриком П. Хесселем:

if(![[NSUserDefaults standardUserDefaults] boolForKey:@"logged_in"]) {
[self displayLogin];
} else {
[self displayMainScreen];
}

будет работать в вашем случае, но имейте в виду, что вы не должны проверять этот код, если какой-либо ключ установлен вообще, потому что если он действительно установлен и установлен в "НЕТ", вы все равно получите результат как если не был установлен вообще. Вместо этого я бы использовал

if([[NSUserDefaults standardUserDefaults] objectForKey:@"logged_in"] == nil) {
    //Do something
}

Ответ 4

Вам не нужно сначала устанавливать его на NO, вместо этого вы можете проверить, был ли вообще установлен ключ. Если нет, и если ваше приложение определяет, что учетные данные завершены, просто создайте его и установите для него YES.

Отметьте мой ответ на другой вопрос, чтобы узнать, как я обычно это делаю.

Ответ 5

в 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() 
}

Ответ 6

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()
  }