ios - 基于解析的应用程序不区分匿名用户和普通用户

标签 ios swift parse-platform segue

我的应用程序的当前行为是: 启动应用程序
输入有效的用户名和密码(从登录屏幕)
点击登录
您将进入主菜单,如下所示:

enter image description here

我注销,然后返回登录屏幕,如下所示:
enter image description here

然后我:
点击访客

继续:

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(从登录 View 的访客和登录按钮):

//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 模拟器上的内容和设置,并从手机中删除该应用程序,我会得到相同的行为:使用普通和匿名用户的初始登录和注销测试似乎工作正常。但几次之后,如果出现这种情况,它会一直显示相同样式的主菜单(普通或访客)并且不会改变,无论我是以匿名用户还是普通用户身份登录。

我很困惑这将如何开始正常工作而不是开始失败。我的猜测是用户凭据以某种方式被覆盖或丢失,但我是 Parse 新手,不确定如何调试此类问题。任何建议将不胜感激!

或者,如果我已经看这个问题太久了,却看不到我所犯的小而愚蠢的错误。

最佳答案

Parse.com 会为您缓存用户对象,因此当您认为用户已登录或注销时,您应该尝试在各个点检查 PFUser.currentUser(),以确认实际情况是否符合您的期望。即使只是在整个过程中将 PFUser.currentUser().description() 记录到控制台也可以帮助您。

关于ios - 基于解析的应用程序不区分匿名用户和普通用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28700325/

相关文章:

iphone - IOS 5 - 从另一个 ViewController 调用一个 ViewController

iOS 应用拒绝问题

ios - Swift 项目需要很长时间才能构建。我能做些什么?

ios - 如何在没有操作的情况下呈现新的 UIViewController?

ios - 如何使用 NSURLSession 正确发送异步请求?

php - 移动/Web 应用程序后端

ios - Swift SKPhysicsBody 通过具有匹配位掩码的静态 SKPhysicsBody

ios - 如何跟踪由 tableView 表示的列表中的选定项目?

ios - Swift:过滤数组中的每 4 个项目

swift - Swift 中从 Parse 到 UIPickerView 缺少数据