iOS: используйте логическое значение в NSUserDefaults
когда rootViewController
из моего приложения загружается, я хочу иметь возможность проверить, были ли сохранены учетные данные для входа пользователей в NSUserDefaults
.
в основном, когда пользователь загружает приложение, и он/она не имеет ее учетные данные для входа сохранены, а modalAlertView
будет нажата, и пользователь сможет сохранить свои учетные данные соответствующим образом. Это спасает тех UITextField
строки для соответствующего
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:)
затем бросьте его в 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() }