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


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

в основном, когда пользователь загружает приложение, и он/она не имеет ее учетные данные для входа сохранены, а modalAlertView будет нажата, и пользователь сможет сохранить свои учетные данные соответствующим образом. Это спасает тех UITextField строки для соответствующего

6 81

6 ответов:

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

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

и прочитать его с помощью этого кода:

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

есть метод в NSUserDefaults под названием registerDefaults:. Этот метод используется для установки приложения " по умолчанию по умолчанию."В основном, вы создаете NSDictionary содержащий ключи и значения по умолчанию (в вашем случае нет для ключа" сохраненные учетные данные"), и вы регистрируете его с помощью 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
}

это решение, предложенное компанией Генрик П. Хессель:

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

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

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

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