iOS Swift返回ViewController触发NSInvalidArgumentException错误求助
问题描述
使用Swift开发iOS应用,从ViewController跳转到WebViewController的功能正常,但点击导航栏返回按钮回到ViewController时应用崩溃。
报错信息
默认对带有'get-task-allow'权限且链接旧SDK的进程或父应用启用检查。请使用
inspectableAPI在新版SDK上启用检查。
2023-09-25 09:24:14.668225+0530 all in one tools[11108:2951385] -[GUL_all_in_one_tools.AppDelegate-EFDEC20C-4D84-4E03-99AF-EE650765ECFE window]: 无法识别发送到实例0x2811c0de0的选择器
2023-09-25 09:24:14.670287+0530 all in one tools[11108:2951385] *** 由于未捕获的异常'NSInvalidArgumentException'终止应用,原因:'-[GUL_all_in_one_tools.AppDelegate-EFDEC20C-4D84-4E03-99AF-EE650765ECFE window]: 无法识别发送到实例0x2811c0de0的选择器'
*** 首次抛出调用栈:
(0x1c22dd48c 0x1bb5bd050 0x1c243e424 0x1c4f07514 0x1c22f2700 0x1c235497c 0x10390d7bc 0x103c597a0 0x103c5b0e8 0x10390d734 0x10390f4dc 0x10390f3f4 0x102f6e380 0x102f6e3c4 0x1c427a9fc 0x1c469ff7c 0x1c4475744 0x1c43ac974 0x1c4453dbc 0x1c450000c 0x1c4a04d68 0x1c51cbfcc 0x1c433370c 0x1c43326c0 0x1c4331ecc 0x1c4331fcc 0x1c37819ec 0x103c597a0 0x103c6834c 0x103c67fa4 0x1c2365a2c 0x1c23496c8 0x1c234dda0 0x1f96bc998 0x1c45df80c 0x1c45df484 0x1ca561ddc 0x102f6ad4c 0x102f6acd4 0x102f6add0 0x1dfafc344)
libc++abi: 因未捕获的NSException类型异常终止
*** 由于未捕获的异常'NSInvalidArgumentException'终止应用,原因:'-[GUL_all_in_one_tools.AppDelegate-EFDEC20C-4D84-4E03-99AF-EE650765ECFE window]: 无法识别发送到实例0x2811c0de0的选择器'
因未捕获的NSException类型异常终止
跳转代码
@IBAction func flipTextBtn(_ sender: Any) { let ViewController:UIStoryboard = UIStoryboard(name: "Main", bundle: nil) let desVC = ViewController.instantiateViewController(withIdentifier: "WebViewController") as! WebViewController desVC.Title = "Title Here" self.navigationController?.pushViewController(desVC, animated: true) }
解决方案
修复AppDelegate的window属性:iOS 13及以后版本中,AppDelegate不再默认包含
window属性,需手动添加:var window: UIWindow?若使用SceneDelegate,需在
scene(_:willConnectTo:options:)方法中正确初始化并关联window。排查Firebase相关依赖:报错中的
GUL_all_in_one_tools.AppDelegate-xxx类名表明问题与Google Utilities(Firebase依赖组件)的动态扩展有关,可尝试:- 将Firebase SDK更新至最新版本
- 执行
Cmd+Shift+K清理项目缓存后重新编译
检查WebViewController生命周期:确认WebViewController的
deinit方法或返回时执行的代码中,是否存在不当调用AppDelegate的window属性的逻辑,及时修正。替换强制类型转换:代码中
as! WebViewController存在崩溃隐患,改为安全的可选绑定:guard let desVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "WebViewController") as? WebViewController else { return }
内容的提问来源于stack exchange,提问作者punjabidharti

