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 } } }) } 以下是正在进行的分步示意图. >用户从登录页面开始输入他/她的凭据 我认为随机的事情可能是相关的: 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) } }) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |