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与设备缓存
- 关闭Xcode,删除
~/Library/Developer/Xcode/DerivedData路径下的所有文件 - 模拟器选择
Device > Erase All Content and Settings,真机则重启后重新安装应用 - 执行
Product > Clean Build Folder(Cmd+Shift+K)清理项目构建缓存
- 关闭Xcode,删除
结束残留的后台任务
强制退出时未完成的后台任务可能导致下次启动进程状态异常。在App生命周期回调中确保结束所有后台任务:func applicationWillTerminate(_ application: UIApplication) { UIApplication.shared.backgroundTasks.forEach { UIApplication.shared.endBackgroundTask($0) } }
内容的提问来源于stack exchange,提问作者user18040647
相关产品推荐
相关产品推荐

