为啥不解析在注销时重置 PFuser?

Posted

技术标签:

【中文标题】为啥不解析在注销时重置 PFuser?【英文标题】:Why doesn't parse reset the PFuser on logout?为什么不解析在注销时重置 PFuser? 【发布时间】:2015-11-26 19:15:47 【问题描述】:

我正在使用:

 else if segue.identifier == "logout" 

    var currentUser = PFUser.currentUser()
    PFUser.logOut()

单击注销按钮后,它会再次进入登录屏幕,但是如果我单击登录按钮,它会重新登录该用户,而无需再次输入任何凭据。

为什么没有在注销时将用户重置为零?

@IBAction func logIn(sender: AnyObject) 

    if username.text == "" || password.text == "" 

       displayNewAlert("Field(s) Empty", message: "Please Enter a Username and Password")

     else 

        activityIndicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 50, 50))
        activityIndicator.center = self.view.center
        activityIndicator.hidesWhenStopped = true
        activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
        view.addSubview(activityIndicator)
        activityIndicator.startAnimating()
        UIApplication.sharedApplication().beginIgnoringInteractionEvents()


        let user = PFUser()
        user.username = username.text
        user.password = password.text

        var errorMessage = "Please Try Again Later"

        PFUser.logInWithUsernameInBackground(username.text!, password: password.text!, block:  (user, error) -> Void in

            self.activityIndicator.stopAnimating()
            UIApplication.sharedApplication().endIgnoringInteractionEvents()

            if user != nil 

               self.performSegueWithIdentifier("login", sender: self)

             else 

                if let errorString = error!.userInfo["error"] as? String 

                    errorMessage = errorString

                

                self.displayNewAlert("Failed Log In", message: "Please enter a valid username and password")
            
        )
    

【问题讨论】:

你能显示他们按下登录按钮时执行的代码吗? @Paulw11 我为它添加了代码。看看 那么您的用户名和密码文本字段是空的吗?为什么要在闭包外创建一个 PFUser ,然后在闭包内检查它是否为非零?那是错的。在闭包中,您应该首先检查非零的错误。如果 error 为 nil,则检查 PFUser.currentUser 是否为非 nil。你根本不需要user 变量 logOut 后 'currentUser' 未设置为 null 的原因是,在设置变量 'currentUser' 的值后调用了 'PFUser.logOut()'。在声明变量之前尝试调用“PFUser.logOut()”。 @Dridia 没用,试过了。 【参考方案1】:

我想出了问题,其他人想知道。我正在注销和登录之间进行故事板segue。

我应该一直在使用:

@IBAction func logOut(sender: AnyObject) 

    PFUser.logOut()
let currentUser = PFUser.currentUser()
    self.dismissViewControllerAnimated(true, completion: nil)

这是执行注销的正确方法。不是从上面提到的

    segue.identifier == "....."

【讨论】:

以上是关于为啥不解析在注销时重置 PFuser?的主要内容,如果未能解决你的问题,请参考以下文章

RestKit:在注销时重置持久存储后映射了 0 个对象

仅在刷新页面时令牌过期时注销?为啥?

用户注销时如何重置 TabNavigator(从其他屏幕)

在注销发生之前未保存当前用户的设置

点击注销时 SwiftUI 将应用程序重置为登录屏幕

注销按钮崩溃