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