在注销发生之前未保存当前用户的设置
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()
函数调用时,用户的属性将在后端正确更新。
我还注意到有两种不同的注销方法:logOutinBackground
和 logOutInBackgroundWithBlock
所以我假设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()
完成之前,您正在注销用户。
【讨论】:
以上是关于在注销发生之前未保存当前用户的设置的主要内容,如果未能解决你的问题,请参考以下文章