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

Objective-C调用isKindOfClass判断自定义TableViewCell类型结果异常

问题根因

类名字符串完全一致但isKindOfClass:返回NO,本质是同名的EditItemTableViewCell类被编译进了至少两个不同的二进制模块,Runtime加载时生成了两个内存地址完全不同的类对象,虽然类名相同,但属于完全独立的两个类,所以类型判断会返回NO。

常见触发场景

  • EditItemTableViewCell.m的Target Membership勾选了多个目标:比如同时加进了主App target、Extension target(通知扩展、手表扩展等)、自定义动态库/静态库target
  • 项目引入的第三方依赖中包含同名的EditItemTableViewCell类实现,和你自己写的类产生了符号冲突
  • Storyboard关联Cell类时选错了Module:在Storyboard的Identity面板给Cell指定自定义类时,Class下方的Module选了其他模块,而你代码中引用的EditItemTableViewCell属于主target,导致Storyboard实例化出来的Cell是其他模块下的同名类

排查解决步骤

  1. 选中EditItemTableViewCell.m文件,打开Xcode右侧的File inspector面板,检查Target Membership配置,确认只勾选了你当前运行的主App target,取消其他所有target的勾选
  2. 打开Storyboard找到对应的TableViewCell,打开Identity inspector面板,确认Class选项下方的Module和你代码中该类所属的Module一致,建议直接勾选「Inherit From Target」选项避免手动选择错误
  3. 可以新增日志打印类的内存地址进一步确认问题:
NSLog(@"Cell类地址:%p,引用类地址:%p", [cell class], [EditItemTableViewCell class]);

如果两个地址不同,就可以确认是类重复加载的问题,按照上述步骤调整即可
4. 如果配置调整完成后仍然报错,清空Xcode的Derived Data文件夹后重新编译运行即可解决

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:45:04