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

SwiftUI应用经控制中心上滑关闭后按钮失效问题排查

解决iOS应用强制退出后按钮失效+Signal 9问题

问题场景

我创建的是Xcode默认项目,仅添加了一个点击时向控制台打印“Works”的Button。首次打开应用、常规退出后重开甚至重启手机后重开,按钮均正常工作;但通过上滑进入控制中心后再上滑关闭应用(强制退出),重开后按钮便失效。偶尔Xcode会提示:Message from debugger: Terminated due to signal 9。

排查与解决步骤

  • 检查启动回调的初始化逻辑
    Signal 9是系统强制终止进程的信号,强制退出后重启App,application(_:didFinishLaunchingWithOptions:)或SceneDelegate的scene(_:willConnectTo:options:)可能存在未正确重置的状态变量,导致UI组件初始化不完整。建议在这些回调中添加日志,对比正常启动和强制退出后重启的日志,确认所有初始化步骤都已执行。

  • 重新绑定按钮的点击事件
    强制退出可能导致UIKit内部状态异常,使得按钮的target-action关联失效。可以在viewDidAppear(_:)中重新绑定点击事件,确保响应链正常:

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        button.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
    }
    
    @objc func buttonTapped() {
        print("Works")
    }
    

    同时检查是否有透明视图意外覆盖在按钮上方,拦截了触摸事件。

  • 清理Xcode与设备缓存

    1. 关闭Xcode,删除~/Library/Developer/Xcode/DerivedData路径下的所有文件
    2. 模拟器选择Device > Erase All Content and Settings,真机则重启后重新安装应用
    3. 执行Product > Clean Build Folder(Cmd+Shift+K)清理项目构建缓存
  • 结束残留的后台任务
    强制退出时未完成的后台任务可能导致下次启动进程状态异常。在App生命周期回调中确保结束所有后台任务:

    func applicationWillTerminate(_ application: UIApplication) {
        UIApplication.shared.backgroundTasks.forEach {
            UIApplication.shared.endBackgroundTask($0)
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:19:56