存储布尔值以供 Parse 登录访问

Storing a Boolean for access by Parse login

我想存储一个布尔值,它在用户使用 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")

您可以使用 NSUserDefaults 以这种方式全局存储您的 Bool

这样设置您的Bool

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

然后您可以通过这种方式在项目的任何位置访问它:

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

希望这会有所帮助。

NSUserDefaults:

您缺少关键组件才能正常工作 - 您必须保存设置:

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

之后,您存储的数据将存储到磁盘上,您可以随时访问它们。

一次性分配给属性:

看完评论后,为了只访问属性一次,可以这样使用:

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

或从 Swift 2.0 (more on it here) 开始:

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

希望对您有所帮助!