要登录,用户输入凭据,如果服务器验证它们,则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 } } }) }
以下是正在进行的分步示意图.
>用户从登录页面开始输入他/她的凭据
>这会将用户(现在已登录)分隔为tabbarViewController
>然后他们导航到另一个标签,并有一个退出按钮
>按下注销按钮会显示警告,点击“是”将用户(现已注销)发送到原始屏幕
>用户现在处于登录屏幕.输入错误的信息会发出警报
>出现警报.点击是关闭警报应该将用户留在登录屏幕上.但是,再次注销屏幕会立即显示…这既没有编码也没有在故事板中手动设置
我认为随机的事情可能是相关的:
在打开应用程序时,会在第一个VC(登录屏幕)的viewDidAppear上调用初始segue.它检查是否有用户登录,通过
if PFUser.current().username? != nil { //perform segue }
这个segue将它们带到标签栏上的地图部分(而不是问题发生的退出页面).
编辑:登出屏幕出现“segue”时,登录屏幕下降(就像字面意思一样,在屏幕上向下倾斜,直到看不见,然后退出屏幕是可查看的,这不是app功能中任何segues的方式) .此外,仅在发生此转换时调用viewDidAppear代码,而不是viewDidLoad代码.
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 举报,一经查实,本站将立刻删除。