Когда rootViewController
приложение моего приложения загружено, я хочу иметь возможность проверить, были ли сохранены учетные данные пользователя для входа в систему NSUserDefaults
.
В основном, когда пользователь загружает приложение и у него / нее нет сохраненных учетных данных для входа, modalAlertView
будет отправлено сообщение, и пользователь сможет сохранить свои учетные данные соответствующим образом. Это сохраняет эти UITextField
строки в соответствующем NSUserDefault
объекте. Однако возможно ли, что когда это сохранение будет выполнено, я смогу создать NSUserDefault
объект, который является логическим, и изменить значение на да?
Это означает, что для логического значения уже установлено значение «нет», и когда пользователь сохраняет свои учетные данные для входа в систему, он также изменяет логическое значение на «да»?
источник
Есть метод в
NSUserDefaults
calledregisterDefaults:
. Вы используете этот метод, чтобы установить для вашего приложения «значения по умолчанию». По сути, вы создаете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]; }
будет работать в вашем случае, но имейте в виду, что вы не должны проверять с помощью этого кода, установлен ли какой-либо ключ вообще, потому что, если он действительно установлен и установлен на "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:)
затем преобразовать его в boolif 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() }
источник