iOS开发:Segue跳转时Timer无法停止的问题求助
嘿,我来帮你解决这个Timer在Segue执行时没停止的问题!
解决方案:确保停止Timer在Segue触发前执行
不管你用哪种方式触发Segue,核心原则是先同步执行stopTimer(),再调用Segue,具体分两种情况处理:
如果是通过代码手动触发Segue:
严格按照这个顺序写代码,确保stopTimer()一定会被执行到:@IBAction func triggerSegueButtonTapped(_ sender: UIButton) { // 先停止Timer,再执行Segue stopTimer() performSegue(withIdentifier: "YourTargetSegueID", sender: self) }如果之前是用Storyboard直接拖拽控件(比如按钮)到目标ViewController生成Segue:
这种方式会跳过你写的控件回调代码,直接由系统触发Segue,所以stopTimer()没机会运行。你需要改成手动触发:- 删除控件和Segue的连线
- 在Storyboard里,从源ViewController直接拖拽到目标ViewController创建Segue,给Segue设置唯一的Identifier
- 给控件绑定IBAction,在action里先调用
stopTimer(),再执行performSegue(就是上面那段代码)
你遇到问题的核心原因
结合你的描述,大概率是以下两种情况之一:
- Segue触发路径跳过了stopTimer代码:
最常见的就是用Storyboard直接连线控件到Segue,这种情况下系统会直接处理Segue跳转,完全不会执行你给控件写的回调逻辑,所以stopTimer()的代码根本没被运行,Timer自然继续跑。 - 代码分支导致stopTimer没被执行:
比如你在某些异步任务(比如网络请求回调)里触发Segue,但stopTimer()被放在了回调的错误分支,或者异步任务本身没走到执行stopTimer()的逻辑,结果Segue执行了,但Timer的停止代码没被调用。
另外你提到用viewDidDisappear可以停止,但不符合需求——这是因为viewDidDisappear是ViewController生命周期方法,只要视图消失就会触发,但你想要的是只有在执行Segue跳转时才停止Timer,所以必须在Segue触发的代码路径里主动调用停止逻辑。
内容的提问来源于stack exchange,提问作者froggomad
相关产品推荐
相关产品推荐

