Хранение логического значения для доступа через логин Parse
Я хочу сохранить логическое значение, которое предоставляет доступ к определенным параметрам, когда пользователь входит в систему с помощью Parse, но когда я вхожу в систему и объявляю ее истинной, переменная, похоже, остается ложной.
Я попытался с помощью NSUserDefaults и хранения глобальной переменной.
Здесь я захожу на один контроллер вида:
PFUser.logInWithUsernameInBackground(userName.text!, password: password.text!) {
(user: PFUser?, error: NSError?) -> Void in
if user != nil {
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "accessGranted")
}
Это нормально работает и печатает "Успех", если я попытаюсь. На другом контроллере представления у меня есть такие вещи:
addButton.enabled = NSUserDefaults.standardUserDefaults().boolForKey("accessGranted")
2 ответа
NSUserDefaults:
Вам не хватает ключевого компонента для его работы - вы должны сохранить настройки:
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "accessGranted")
NSUserDefaults.standardUserDefaults().synchronize()
После этого ваши данные будут сохранены на диске, и вы сможете получить к ним доступ в любое время.
Единовременное присвоение недвижимости:
Прочитав комментарий, чтобы получить доступ к свойству только один раз, вы можете использовать что-то вроде этого:
var accessGranted : Bool?
if accessGranted == nil {
accessGranted = yourValue
}
или на Swift 2.0 ( подробнее об этом здесь):
var accessGranted : Bool?
guard let granted = accessGranted else {
accessGranted = yourValue
}
Изменить 2:
Чтобы уведомить второй VC об изменениях, вы можете использовать несколько механизмов (протоколы / делегаты и т. Д.), Но обычно для такого рода сообщений вы используете уведомления (так что все ваше приложение может их прослушать).
Уведомления
Вы можете использовать уведомления, как это:
При вызове "login" уведомите приложение об изменении статуса доступа, например:
let NOTIFICATION_ACCESS_CHANGED_KEY = "NotificationAccessChanged"
NSNotificationCenter.defaultCenter().postNotificationName(NOTIFICATION_ACCESS_CHANGED)
затем везде, где вы заинтересованы, чтобы прослушать это изменение, поместите уведомление слушателя:
NSNotificationCenter.defaultCenter().addObserverForName(NOTIFICATION_ACCESS_CHANGED, object: nil, queue: nil) { (notification) -> Void in
// This block will be called when you post notification
self.doSomething()
}
Надеюсь, поможет!
Ты можешь использовать NSUserDefaults
хранить ваши Bool
глобально таким образом:
Установите свой Bool
сюда:
NSUserDefaults.standardUserDefaults().setBool(false, forKey: "YourKey")
Тогда вы можете получить к нему доступ в любом месте вашего проекта следующим образом:
let yourBool = NSUserDefaults.standardUserDefaults().boolForKey("YourKey")
Надеюсь, это поможет.