ARC语义问题:No Known Instance Method For Selector iOS编译报错
No known instance method for selector报错排查方案 这个报错是iOS Objective-C 混合开发/纯OC开发阶段的高频编译错误,本质是编译器在当前上下文的可见范围内,没有检索到你调用的实例方法的合法声明,可按照以下步骤逐一排查:
- 核对方法拼写与参数标签
Objective-C 方法名严格区分大小写,且包含所有参数标签,比如updateOrderWithId:status:和updateOrderWithID:status:是两个完全不同的方法,漏写参数、拼写错误都会触发报错,先逐字核对调用的方法和声明的方法是否完全一致。 - 核对头文件导入逻辑
如果调用的是其他业务类的实例方法,确认已经导入该类的头文件;如果调用的是Swift类暴露给OC的方法,确认已导入自动生成的{模块名}-Swift.h头文件,且对应方法已经加@objc修饰暴露给OC运行时。 - 核对方法声明与实现的一致性
确认方法是否在头文件中对外声明,仅写在.m类扩展里的私有方法,外部类直接调用时会触发该报错。另外注意区分实例方法(-开头)和类方法(+开头),用实例调用类方法、或者用类调用实例方法都会触发同类报错。 - 核对系统API兼容性
如果调用的是iOS系统提供的API,确认该API的最低支持版本和你项目的最低部署版本是否匹配,高版本系统新增的API在低部署版本下无对应声明,也会触发该报错,需要调整部署版本或者加可用版本判断逻辑。 - 特殊场景的临时绕过方案
如果确认方法运行时一定存在,只是不想对外暴露头文件,可以将调用对象强转为id类型后再调用方法,或者使用performSelector:系列方法触发调用,该方式会跳过编译期的方法检查,但需要自行保证运行时方法存在,否则会出现未识别选择器崩溃。
内容的提问来源于stack exchange,提问作者Francisco Alvarez
相关产品推荐
相关产品推荐

