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

重命名方法后参数类型正常却触发NSInvalidArgumentException?

解决重命名方法后调用super sceneDidConnectWithOptions:崩溃的NSInvalidArgumentException问题
  • 排查方法签名的隐性不一致
    虽然你看到的父类和子类方法签名表面一致,但要抠细节:

    • 检查参数的nullable/nonnull修饰符:比如父类方法可能是- (void)sceneDidConnectWithOptions:(nullable UISceneConnectionOptions *)connectionOptions;,子类没加nullable,这种细微差异会导致运行时方法匹配失败,触发参数类型异常。
    • 确认父类头文件是否被正确引入,子类的继承声明是否正确——重命名时不小心改了父类名称的情况并不少见,这会导致你调用的super并非预期的父类。
  • 彻底清理项目缓存后重建
    Xcode的缓存经常会在重命名操作后保留旧的方法元数据,导致运行时逻辑混乱:

    • 按Cmd+Shift+K清理项目
    • 按Cmd+Option+Shift+K清理构建文件夹
    • 手动删除DerivedData文件夹(路径:~/Library/Developer/Xcode/DerivedData)
    • 重启Xcode后重新构建运行
  • 检查运行时方法篡改逻辑

    • 如果项目里有Category或者Runtime Swizzling代码修改了sceneDidConnectWithOptions:,重命名操作可能让这些代码失效或逻辑混乱——比如Swizzle代码还在引用旧的方法名,导致方法调用链断裂。
    • 用LLDB调试确认:在崩溃行打断点,输入po [super class]确认父类是否正确;再输入po [super methodSignatureForSelector:@selector(sceneDidConnectWithOptions:)],把输出的签名和子类的对比,看是否完全一致。
  • 排查ARC/MRC混合场景的内存标记问题
    如果项目里存在MRC文件,重命名方法时可能没同步内存管理标注(比如父类方法有NS_RETURNS_RETAINED这类标记),子类的方法缺少对应标注会导致运行时参数处理异常,触发崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 00:41:10