斯威夫特&解析 - PFUser currentUser永远不等于nil

时间:2015-05-13 13:47:22

标签: ios xcode swift parse-platform pfuser

我正在使用Xcode,Swift和Parse。当我尝试注销PFUser时,我永远不会得到零回报。

在应用程序的这一部分中,viewController只显示一个登录的按钮。一个用户发送注册。一个人发送用户更改详细信息,一个是简单的注销。

注销时重要的两个代码是;

@IBAction func logout(sender: AnyObject) {

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

    self.displayAlert("You are now logged out", error: "")

    println(currentUser!)
}

@IBAction func changeDetails(sender: AnyObject) {

    var currentUser = PFUser.currentUser()

    println(currentUser!)

        if currentUser != nil {

            let nextView30 = self.storyboard?.instantiateViewControllerWithIdentifier("changeDetails") as! changeUserDetailsViewController

           self.navigationController?.pushViewController(nextView30, animated: true)

    } else {

        self.displayAlert("Please log in", error: "")

    }

}

一旦代码运行并且我注销,无论currentUser被读取到哪里,我都得到以下类型的响应,而不是nil。下一个ViewController被执行,如果没有usr登录,就不会发生这种情况。

PFUser:0x37018fbc0,objectId:new,localId:local_3b5eb7453f9af5ed { }

我做错了什么还是这个标准? 如果正确,我该如何返回没有用户登录?

由于

4 个答案:

答案 0 :(得分:3)

    if PFUser.currentUser()!.username != nil
    {
        self.performSegueWithIdentifier("loginSegue", sender: self)
    }

以上代码适用于登录问题。但我仍然有退出问题。在我调用PFUser.logout()之后,PFUser.currentUser()不会变为nil。有什么帮助吗?

由于

答案 1 :(得分:3)

我一直在努力退出一段时间,我相信我终于破解了它!

无论我做什么,当我使用“PFUser.logOut()”时,永远不会将“PFUser.currentUser()”设置为nil,但它会将“PFUser.currentUser()!。username”设置为nil ..

因此我使用了

FragmantActivity

作为要跟踪的全局变量是用户已登录。

在我的登录/首页上,我添加了

var currentUser = PFUser.currentUser()!.username

最后在我使用的退出按钮上

override func viewDidAppear(animated: Bool) {

    if currentUser != nil {

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

    }

}

我希望有所帮助!

答案 2 :(得分:1)

override func viewDidLoad(animated: Bool) {

var currentUser = PFUser.currentUser()?.username if(currentUser != nil){ var loginAlert: UIAlertController = UIAlertController(title: "Signup/ Login", message:"Please Signup or Login" , preferredStyle: UIAlertControllerStyle.Alert) loginAlert.addTextFieldWithConfigurationHandler({ textfield in textfield.placeholder = "Your Username" }) loginAlert.addTextFieldWithConfigurationHandler({ textfield in textfield.placeholder = "Your Password" textfield.secureTextEntry = true }) loginAlert.addAction(UIAlertAction(title: "Login", style: UIAlertActionStyle.Default, handler: {alertAction in let textFields: NSArray = loginAlert.textFields! as NSArray let usernameTextFields: UITextField = textFields.objectAtIndex(0) as! UITextField let passwordTextFields: UITextField = textFields.objectAtIndex(1) as! UITextField PFUser.logInWithUsernameInBackground(usernameTextFields.text as String!, password: passwordTextFields.text as String!){ (loggedInuser: PFUser?, signupError: NSError?) -> Void in if((loggedInuser) != nil){ println("User logged in successfully") }else{ println("User login failed") } } })) loginAlert.addAction(UIAlertAction(title: "SignUp", style: UIAlertActionStyle.Default, handler: {alertAction in let textFields: NSArray = loginAlert.textFields! as NSArray let usernameTextFields: UITextField = textFields.objectAtIndex(0) as! UITextField let passwordTextFields: UITextField = textFields.objectAtIndex(1) as! UITextField var sweeter : PFUser = PFUser() sweeter.username = usernameTextFields.text sweeter.password = passwordTextFields.text sweeter.signUpInBackgroundWithBlock {(sucess,error) -> Void in if !(error != nil){ println("sign up success") }else { println("constant error string\(error)") } } })) self.presentViewController(loginAlert, animated: true, completion: nil) } }

答案 3 :(得分:1)

尝试在AppDelegate.swift文件中注释掉以下代码行 -

PFUser.enableAutomaticUser()

enableAutomaticUser()将在您调用PFUser.logOut()后登录匿名用户,并且匿名用户的用户名为nil。