微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift – 无法登录导致未编码的segue?

我有一个应用程序设置,用户可以登录和注销(这是通过heroku托管的Parse服务器,使用Parse框架处理).

登录,用户输入凭据,如果服务器验证它们,则segue将它们移动到另一个viewcontroller.注销用户退出应用程序并将其转移回登录屏幕.这些工作正常.

如果初始登录凭据不正确,则会显示警告,提示用户重试并且用户登录(显然)并保留在登录屏幕上.

但是,如果用户登录,注销,然后输入不正确的凭据(按此顺序,没有关闭模拟器),则会出现问题.错误的凭据会显示提示警报;点击“确定”关闭警报,用户没有登录,但是视图被锁定到注销屏幕(注销按钮是……这应该只有登录用户才能访问).不存在segue segue(编码或在故事板上),将用户登录直接移动到注销屏幕.

没有任何操作可行,因为许多操作都需要用户ID,并且没有任何操作因为没有登录.我不知道为什么不正确的登录会以这种方式移动VC,因为不存在可以做到这一点的segue.有一个反向运动(退出时),但没有朝那个方向运动.

有人有什么想法吗?以下是相关的登录代码.

@IBAction func signInTapped(_ sender: UIButton) {
        UIApplication.shared.beginIgnoringInteractionEvents()

        PFUser.logInWithUsername(inBackground: userNameTextField.text!,password: passwordTextField.text!,block: { (user,error) in
            if user != nil{

                self.performSegue(withIdentifier: "signInSegue",sender: self)//if the sign in works    
            } else{

                if let errorString = (error! as NSError).userInfo["error"] as? String{

                    let errorMessage = errorString

                    self.displayAlert("Failed login",message: errorMessage)//this is the code run when the login fails,yet it somehow can sometimes segue to the other viewcontroller
                }   
            }
        })
}

以下是正在进行的分步示意图.

The user starts at the login page and inputs his/her credentials


This segues the user (now logged on) to a <code>tabbarViewController</code>


They then navigate to another tab and there is a sign out button


Pressing the sign out button causes an alert to appear,hitting yes segues the user (now logged out) to the original screen


The user is now at the login screen. Inputting the wrong info brings up an alert


The alert appears. Hitting yes closes the alert is supposed to leave the user on the login screen. However,there is an immediate segue to the logout screen again... this is neither coded nor manually set in the storyboard

>用户登录页面开始输入他/她的凭据
>这会将用户(现在已登录)分隔为tabbarViewController
>然后他们导航到另一个标签,并有一个退出按钮
>按下注销按钮会显示警告,点击“是”将用户(现已注销)发送到原始屏幕
>用户现在处于登录屏幕.输入错误的信息会发出警报
>出现警报.点击是关闭警报应该将用户留在登录屏幕上.但是,再次注销屏幕会立即显示…这既没有编码也没有在故事板中手动设置

我认为随机的事情可能是相关的:
在打开应用程序时,会在第一个VC(登录屏幕)的viewDidAppear上调用初始segue.它检查是否有用户登录,通过

if PFUser.current().username? != nil {
      //perform segue
}

这个segue将它们带到标签栏上的地图部分(而不是问题发生的退出页面).

编辑:登出屏幕出现“segue”时,登录屏幕下降(就像字面意思一样,在屏幕上向下倾斜,直到看不见,然后退出屏幕是可查看的,这不是app功能中任何segues的方式) .此外,仅在发生此转换时调用viewDidAppear代码,而不是viewDidLoad代码.

编辑2:我认为问题与视图层次结构有关.这是登录功能代码

PFUser.logInWithUsername(inBackground: userNameTextField.text!,error) in

            if user?.username != nil{ 
                self.performSegue(withIdentifier: "signInSegue",sender: self) 
            } else{ //if everything in this code block is commented,the issue does not occur
                if let errorString = (error! as NSError).userInfo["error"] as? String{
                    let errorMessage = errorString
                    self.displayAlert("Failed login",message: errorMessage)
                }  
            }
        })

如果我在if语句的else部分注释掉所有内容,则不会发生此问题.我认为正在发生的是警报显示,并点击“确定”关闭警报并将应用程序发回最顶层(也许我错了我正在调用它)viewController,这是某种方式注销VC .我认为修复它的一个方法添加类似self.present(homescreenVC)或类似的东西到else代码,但我不知道如何做到这一点.

解决方法

@IBAction func signInTapped(_ sender: UIButton) {
    UIApplication.shared.beginIgnoringInteractionEvents()

    PFUser.logInWithUsername(inBackground: userNameTextField.text!,error) in
        if error != nil {
             if let errorString = (error! as NSError).userInfo["error"] as? String{

                let errorMessage = errorString

                self.displayAlert("Failed login",message: errorMessage)
               }
        } 
        else {
            self.performSegue(withIdentifier: "signInSegue",sender: self)

            }   
        })
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐