"_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 中没有用到的地址删除

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

你可能感兴趣的:("_OBJC_CLASS_$_ClassA", referenced from: objc-class-ref in ClassB.o)