2015-08-04 5 views
0

Я хочу сохранить логическое значение, которое предоставляет доступ к определенным параметрам, когда пользователь входит в систему с 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") 



      } 

Эта функция отлично и печатает «Success», если я попытаюсь. На другой контроллер зрения у меня есть такие вещи, как это:

addButton.enabled = NSUserDefaults.standardUserDefaults().boolForKey("accessGranted") 

ответ

0

NSUserDefaults:

Ваш отсутствует ключевой компонент для того, чтобы работать - вы должны сохранить настройки:

NSUserDefaults.standardUserDefaults().setBool(true, forKey: "accessGranted") 
NSUserDefaults.standardUserDefaults().synchronize() 

После этого ваши данные, сохраненные будут храниться на диске и вы можете получить к ним доступ в любое время.

Одноразовый присвоить свойству:

После прочтения комментария, чтобы получить доступ к собственности только один раз, вы можете использовать что-то вроде этого:

var accessGranted : Bool? 
if accessGranted == nil { 
    accessGranted = yourValue 
} 

или Свифта 2.0 (more on it here):

var accessGranted : Bool? 
guard let granted = accessGranted else { 
    accessGranted = yourValue 
} 

Edit 2:

Чтобы уведомить второй VC об изменениях, вы можете использовать несколько механизмов (протоколы/делегаты и т. Д.), Но обычно для такого типа сообщений вы должны использовать уведомления (чтобы ваше приложение могло это слушать).

Уведомление

Вы можете использовать уведомление, как это:

В разделе "Вход" вызов, уведомить приложение, что ваш статус доступа изменен, как это:

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

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

+0

Я нашел проблему: поскольку я использую контроллер представления подробного представления, приложение не перезагружает главную страницу при запуске и, следовательно, предотвращает доступ: любые идеи? – GJZ

+0

Попробуйте использовать оповещения :) NSNotificationCenter.defaultCenter.postNotificationName && NSNotificationCenter.defaultCenter(). AddObserverForName –

+0

Звучит неплохо, но не могли бы вы отправить ответ более подробно, тогда я тоже могу его принять;) – GJZ

1

Вы можете использовать NSUserDefaults для хранения Bool глобально так:

Установите ваш Bool таким образом:

NSUserDefaults.standardUserDefaults().setBool(false, forKey: "YourKey") 

Тогда вы можете доступ к нему в любом месте вашего проекта таким образом:

let yourBool = NSUserDefaults.standardUserDefaults().boolForKey("YourKey") 

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

+0

Это было отличное решение, основанное на моем сообщении, однако я ошибся в этой проблеме. Я попробовал это, и это не сработало. Что мне теперь делать? – GJZ

+0

показать код, как вы пытаетесь. –

+0

Хорошо, подождите один момент – GJZ