"_OBJC_CLASS_$_ClassA", referenced from: objc-class-ref in ClassB.o

这个错误在开发中,还算是比较常见的.

个人只遇到两种情况导致这个问题的出现

1.引入头文件时粗心大意

在Xcode中, 引入头文件的智能提示,提供文件的.h 和 .m两种提示, 有的时候一不小心, 引入一个.m 那么就会导致这个错误的出现

2.缺少某个类的@implementation, 也就是实现

这个情况在一般情况下应该不会出现, 因为在创建一个新文件的时候, .h , .m两个文件中会自动生成@interface 和 @implementation, 所以不会导致这个错误.
但是很多时候, 我们会在一个类里面写及各类, 这个时候@interface 和@implementation就需要我们手动去写了. 如果只写了Class A的@interface 没有写 Class B的@implementation, 并且在其他类中用到了Class A的对象或方法, 那么也会导致这个错误.

以上是本人在开发中遇到的关于"_OBJC_CLASS_$_类名", referenced from: objc-class-ref in 另一个类名.o的错误.

下面是自己在网上收集的一些关于这个错误的出现情景和解决方式

[参考:彻底解决OBJC_CLASS$_某文件名", referenced from:问题(转)]

1. 引入静态库

静态库分为模拟器用的和真机用的, 真机用的又需要支持所有的CPU架构, 所以在引入静态库的时候, 引入当前设备不支持的库时,也会导致这个错误的出现

排错方法: 如果当前选中设备是模拟器, 那就换成真机再编译一下(尽量别选用5和5c).如果错误消失, 那就是引错了静态库

也可以使用lipo -info在终端中查看framework的支持架构

2.报错文件没有参加编译

可能是在往项目中拖拽文件的时候没有Add totargets,或者add错了

可以到在Build Phases里的Compile Sources 中看看有没有ClassA.m,如果没有,手动添加一下该类的.m文件

3. 重复编译,可能你之前复制过两个地方,在这里添加过两次,删除时系统没有默认删除编译引用地址

在Build Settings里搜索Search Paths 将里面Library Search Paths 中没有用到的地址删除

希望大家可以把我这里没有的, 自己遇到的情况和解决方法告诉我, 我写到这里, 方便大家查询

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,856评论 0 9
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,259评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,839评论 18 399
  • 静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别...
    吃瓜群众呀阅读 12,176评论 3 42
  • 我们都天真的以为忘不了的过去都是旧伤, 以为每个人都会一样钟情到想要逃亡 可是后来才发现停在原地的只有自己的模样 ...
    柒有良人阅读 201评论 2 1