首次安装启动iOS App触发未识别Selector崩溃问题求助
搞定首次安装启动的
unrecognized selector崩溃 嘿,这个问题我之前也碰到过!首次装完启动崩,重启就好,删了重装又来,这种偶发但必现的场景大多和界面文件关联或者类加载的小细节有关。先看你的崩溃日志:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[OnBoardViewController info:]: unrecognized selector sent to instance 0x7f86f4c1f090'
再看你贴的OnboardViewController代码,我一眼就注意到一个高危问题——类名大小写不一致!崩溃日志里的类名是OnBoardViewController(大写B),但你的代码里定义的是OnboardViewController(小写b),这大概率就是核心原因!
下面给你一步步排查和解决的方向:
1. 统一类名大小写
这几乎是必解决的点:
- 你在Storyboard/Xib里给这个ViewController设置的类名应该是
OnBoardViewController(带大写B),但实际代码里的类是OnboardViewController - 首次启动时,系统加载Storyboard找类,因为大小写不匹配,类加载出现异常,触发了错误的方法调用;重启后类缓存生效,暂时绕开了这个问题
- 解决方式二选一:要么把代码里的类名改成
OnBoardViewController,要么去Storyboard里把ViewController的类名改成小写b的OnboardViewController,必须保证完全一致
2. 清理Storyboard/Xib的无效关联
崩溃提示info:方法不存在,说明肯定有地方绑定了这个不存在的方法:
- 打开包含这个ViewController的Storyboard,选中
OnboardViewController - 打开右侧面板的「Connections Inspector」(箭头图标)
- 仔细检查所有的Outlet和Action,找到绑定到
info:的条目,直接删除这个无效关联 - 顺便检查你的
OnboardCell有没有错误地把方法绑定到ViewController上
3. 彻底清理缓存后验证
做完上面的修改后,一定要执行以下步骤确保没有缓存干扰:
- 删除模拟器/真机上的App
- 用
Cmd+Shift+K清理Xcode的Build缓存 - 重新编译运行,测试是否还会崩溃
其他可能的排查方向
如果上面的方法没用,再试试这些:
- 检查项目里有没有
UIViewController的Category,或者使用了Method Swizzling的代码,会不会误加了info:方法的调用逻辑 - 尝试用纯代码初始化
OnboardViewController,暂时不用Storyboard,看是否还会崩溃,以此判断是不是界面文件的问题
另外你贴的两张截图(第一张是崩溃场景,第二张应该是Storyboard界面),如果Storyboard里的ViewController类名确实是大写B的话,那第一个问题就是关键了!
内容的提问来源于stack exchange,提问作者MobileDev
相关产品推荐
相关产品推荐

