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

Posted

技术标签:

【中文标题】在注销发生之前未保存当前用户的设置【英文标题】:The current user's settings are not being saved prior to the logout occurring 【发布时间】:2016-03-02 09:10:12 【问题描述】:

我想知道是否有人可以帮助我解决我遇到的这个烦人的错误。

在我的应用中,当用户注销时,我希望能够在此之前将用户的“shareLocation”属性更改为 false。

但是,它没有正确更新。

但是我注意到,当没有进行 PFUser.logOut() 函数调用时,用户的属性将在后端正确更新。

我还注意到有两种不同的注销方法:logOutinBackgroundlogOutInBackgroundWithBlock

所以我假设PFUser.logOut() 的执行发生在保存到后台调用之前?

有人可以帮我找出正确的实现方式吗?

提前谢谢你!

相关代码sn-ps如下。如果需要更多信息,请告诉我。

PS - 除了下面的 prepareForSegue 方法之外,我还尝试让 PFUser.logOut()user!.saveInBackground() 调用之后立即出现,并且用户在注销之前仍未正确更新segue 被调用。

@IBAction func btnLogout(sender: AnyObject) 

    let user = PFUser.currentUser()
    user!["shareLocation"] = false
    user!.saveInBackground()

    performSegueWithIdentifier("logoutSegue", sender: self)



override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    if (segue.identifier == "logoutSegue") 
        PFUser.logOut()

    

【问题讨论】:

【参考方案1】:

您应该使用完成块保存在后台,然后在完成块中触发注销请求。通过这种方式,您知道新状态已保存并且您可以安全地注销。您还可以检查状态以确保保存成功。

【讨论】:

【参考方案2】:

试试:

user!.saveInBackgroundWithBlock  (success: Bool!, error: NSError!) -> Void in
    if success 
        performSegueWithIdentifier("logoutSegue", sender: self)
     else 
        NSLog("%@", error)
    


因为在saveInBackground() 完成之前,您正在注销用户。

【讨论】:

以上是关于在注销发生之前未保存当前用户的设置的主要内容,如果未能解决你的问题,请参考以下文章

ejabberd -- 在 ejabberd 上设置昵称在我注销之前不会反映 Pidgin/Empathy

CentOS 7 用户怎样安装 LNMP

windows的切换用户、注销和重新启动有啥区别?

win8 如何设置单独一个用户的权限

黑苹果待机后自动注销登陆

苹果 imac 客人账户 如何保存偏好设置?