存储布尔值以供 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()
}
希望对您有所帮助!
我想存储一个布尔值,它在用户使用 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()
}
希望对您有所帮助!