最近从SVN拉去代码缺少某个文件,之后把缺少的文件添加上去,xcode就报错,Xcode编译出现_OBJC_CLASS_$_XX 问题
解决的方案:
打开项目targets-->build phases-->
1.检查Compile Sources中是否有缺少.m文件。
2.检查link binary with libraries中是否缺少依赖库,或者根本忘了导入库。
3.有些第三方库可能需要导入libz.dylib,在上述link binary with libraries中。
4.检查所导入库文件路径的下文件是否存在,并检查targets-->building setting下search paths下相应路径是否正确。
我的就是第一种情况,,,我把文件拖进工程了,但是在Compile Sources 找不到文件,
只需点 + 号,添加一遍就行
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 中没有用到的地址删除
http://www.jianshu.com/p/190cc6b813a8 这个是人家的