Хранение логического значения для доступа через логин 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")

Надеюсь, это поможет.

Другие вопросы по тегам