Parse-based 应用不区分匿名用户和普通用户
Parse-based app not differentiating between anonymous and normal user
我的应用程序的当前行为是:
启动应用程序
输入有效的用户名和密码(从登录屏幕)
点击登录
您将被带到主菜单,如下所示:
我注销,然后回到登录屏幕,如下所示:
然后我:
点击访客
转场:
override func prepareForSegue(segue: (UIStoryboardSegue!), sender: AnyObject!) {
if (segue.identifier == "go-to-main-menu") {
var svc = segue!.destinationViewController as MainMenuViewController
svc.toPass = self.signUpObjectId
println("inside login prep for segue, objectId: ")
println(svc.toPass)
}
if 子句有点傻,因为此时我们只有一个 segue,但两个按钮使用相同的 segue 标识符,但我相信这不是问题或原因。
我按以下方式调用(?)segue(从登录视图的访客和登录按钮):
//Go to main menu
self.performSegueWithIdentifier("go-to-main-menu", sender: nil)
我也用 sender: self 尝试过,如果有任何可察觉的差异的话,也没有太大区别。
它将应用程序发送到主菜单,除了我在 viewDidLoad 方法中添加了代码,该方法检查用户类型,然后隐藏配置文件按钮并修改注销按钮的标题(如果用户是 Parse 匿名用户) :
override func viewDidLoad() {
super.viewDidLoad()
//Hide my account button if user is guest and ensure title is LOGIN for but logout/login button if user is GUEST
if PFAnonymousUtils.isLinkedWithUser(PFUser.currentUser()) {
profileButton.hidden = false
loginButton.setTitle("Logout", forState: .Normal)
} else if PFUser.currentUser() != nil {
profileButton.hidden = false
loginButton.setTitle("Logout", forState: .Normal)
}
else {
myAccountButton.hidden = true
profileButton.setTitle("Login", forState: .Normal)
}
如果我在 iOS 模拟器上重置内容和设置并从我的 phone 中删除该应用程序,我会得到相同的行为:使用普通用户和匿名用户的初始登录和注销测试似乎工作正常。但是几次之后,如果那样,它会一直呈现相同风格的主菜单(普通或来宾)并且不会改变,无论我是以匿名用户还是普通用户身份登录。
我很困惑这将如何开始正常工作而不是开始失败。我的猜测是用户凭据以某种方式被覆盖或丢失,但我是 Parse 的新手并且不确定如何调试此类问题。任何建议将不胜感激!
或者,如果我已经查看了太多小时,却看不到我正在犯的小而愚蠢的错误。
Parse.com 为您缓存了用户对象,因此当您认为用户已登录或注销时,您应该尝试在不同的点检查 PFUser.currentUser() 以确认这实际上是现实符合您的期望。即使只是在整个过程中将 PFUser.currentUser().description() 记录到控制台也可以帮助您。
我的应用程序的当前行为是:
启动应用程序
输入有效的用户名和密码(从登录屏幕)
点击登录
您将被带到主菜单,如下所示:
我注销,然后回到登录屏幕,如下所示:
然后我:
点击访客
转场:
override func prepareForSegue(segue: (UIStoryboardSegue!), sender: AnyObject!) {
if (segue.identifier == "go-to-main-menu") {
var svc = segue!.destinationViewController as MainMenuViewController
svc.toPass = self.signUpObjectId
println("inside login prep for segue, objectId: ")
println(svc.toPass)
}
if 子句有点傻,因为此时我们只有一个 segue,但两个按钮使用相同的 segue 标识符,但我相信这不是问题或原因。
我按以下方式调用(?)segue(从登录视图的访客和登录按钮):
//Go to main menu
self.performSegueWithIdentifier("go-to-main-menu", sender: nil)
我也用 sender: self 尝试过,如果有任何可察觉的差异的话,也没有太大区别。
它将应用程序发送到主菜单,除了我在 viewDidLoad 方法中添加了代码,该方法检查用户类型,然后隐藏配置文件按钮并修改注销按钮的标题(如果用户是 Parse 匿名用户) :
override func viewDidLoad() {
super.viewDidLoad()
//Hide my account button if user is guest and ensure title is LOGIN for but logout/login button if user is GUEST
if PFAnonymousUtils.isLinkedWithUser(PFUser.currentUser()) {
profileButton.hidden = false
loginButton.setTitle("Logout", forState: .Normal)
} else if PFUser.currentUser() != nil {
profileButton.hidden = false
loginButton.setTitle("Logout", forState: .Normal)
}
else {
myAccountButton.hidden = true
profileButton.setTitle("Login", forState: .Normal)
}
如果我在 iOS 模拟器上重置内容和设置并从我的 phone 中删除该应用程序,我会得到相同的行为:使用普通用户和匿名用户的初始登录和注销测试似乎工作正常。但是几次之后,如果那样,它会一直呈现相同风格的主菜单(普通或来宾)并且不会改变,无论我是以匿名用户还是普通用户身份登录。
我很困惑这将如何开始正常工作而不是开始失败。我的猜测是用户凭据以某种方式被覆盖或丢失,但我是 Parse 的新手并且不确定如何调试此类问题。任何建议将不胜感激!
或者,如果我已经查看了太多小时,却看不到我正在犯的小而愚蠢的错误。
Parse.com 为您缓存了用户对象,因此当您认为用户已登录或注销时,您应该尝试在不同的点检查 PFUser.currentUser() 以确认这实际上是现实符合您的期望。即使只是在整个过程中将 PFUser.currentUser().description() 记录到控制台也可以帮助您。