You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()没机会运行。你需要改成手动触发:

    1. 删除控件和Segue的连线
    2. 在Storyboard里,从源ViewController直接拖拽到目标ViewController创建Segue,给Segue设置唯一的Identifier
    3. 给控件绑定IBAction,在action里先调用stopTimer(),再执行performSegue(就是上面那段代码)
你遇到问题的核心原因

结合你的描述,大概率是以下两种情况之一:

  1. Segue触发路径跳过了stopTimer代码:
    最常见的就是用Storyboard直接连线控件到Segue,这种情况下系统会直接处理Segue跳转,完全不会执行你给控件写的回调逻辑,所以stopTimer()的代码根本没被运行,Timer自然继续跑。
  2. 代码分支导致stopTimer没被执行:
    比如你在某些异步任务(比如网络请求回调)里触发Segue,但stopTimer()被放在了回调的错误分支,或者异步任务本身没走到执行stopTimer()的逻辑,结果Segue执行了,但Timer的停止代码没被调用。

另外你提到用viewDidDisappear可以停止,但不符合需求——这是因为viewDidDisappear是ViewController生命周期方法,只要视图消失就会触发,但你想要的是只有在执行Segue跳转时才停止Timer,所以必须在Segue触发的代码路径里主动调用停止逻辑。

内容的提问来源于stack exchange,提问作者froggomad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:29:52