在ViewDidLoad/ViewDidAppear中调用Segue失败,已验证邮件仍未触发跳转
解决Segue未执行的问题
首先,既然控制台能输出"started",说明你的用户邮箱验证逻辑是正常触发的,问题集中在performSegue的执行环节上,我给你几个排查和修复的方向:
检查Segue标识符的准确性
打开你的Storyboard,找到这个Segue,确认它的Identifier字段和你代码里的"gotoMoin"完全一致——包括大小写、拼写,甚至不能有多余的空格,这个细节很容易踩坑。确保在主线程执行UI操作
Firebase的addStateDidChangeListener回调有时候可能不在主线程触发,而所有UI相关操作(包括Segue跳转)必须在主线程执行。你可以把performSegue包裹在主线程调度里试试:Auth.auth().addStateDidChangeListener { auth, user in if (user?.isEmailVerified)! { print("started") DispatchQueue.main.async { self.performSegue(withIdentifier: "gotoMoin", sender: nil) } } }确认当前ViewController的上下文状态
检查你的当前VC是否处于可以触发Segue的状态:- 它是不是导航控制器(UINavigationController)的栈顶控制器?如果不是,Segue可能无法正常触发。
- 有没有其他模态弹窗(presented VC)覆盖在当前VC上?这种情况下Segue也会失效。
尝试替换Segue触发方式(备选方案)
如果上面的方法都没用,你可以直接通过Storyboard实例化目标VC来跳转,绕开Segue的问题:DispatchQueue.main.async { let targetVC = self.storyboard?.instantiateViewController(withIdentifier: "MoinViewControllerID") as! MoinViewController self.navigationController?.pushViewController(targetVC, animated: true) // 如果是模态跳转用这个: // self.present(targetVC, animated: true) }注意这里需要给目标VC在Storyboard里设置对应的Storyboard ID。
内容的提问来源于stack exchange,提问作者Dominik
相关产品推荐
相关产品推荐

