[汇]编译错误汇总
1、"std::ios_base::Init::~Init()", referenced from
出现这样的编译问题,是需要再加进libstdc++.dylib和libstdc++.6.dylib(为6.1使用,xcode5以后默认complier也可以编译通过)
2、apple Mach-o Linker error通常是因为compile source中有相同的.m文件
3、如果在真机中进行测试时出现failed to get the task for process,有可能是证书出了问题。
4、如果出现expect a type的错误,可能出现了在.h文件中的循环引用。
5、以后不能同时有两个一样的.m文件在编译,这样会报linker command failed with exit code 1 (use -vto see invocation)这个错误
(另外:如果代码中混合有C或者C++代码,那么,也不可以在两个不同名称的mm文件中进行声明或者引用,因为也会导致这个错误的发生)。
6. 编译器提示类似file is universal but does not contain a(n) armv6 slice for architecture armv6的错误。可能是您的XCode版本过低,推荐使用4.2以上的版本,将XCode的Build Settings中的Architectures设置成arm7。
7. XCode提示有类似C++语法的错误。可能是您在调用接口时没有设置成OC与C++混编模式(具体做法为将调用接口的实现文件改为.mm的后缀)。
8. 提示类似ld: 3 duplicate symbols for architecture i386(arm7)的错误。可能是您用了与SDK相同的第三方库,解决方法是删除引起错误的第三方法库的实现文件(.m文件)。
9. 编译器提示类似file is universal (2 slices) but does not contain a(n) armv7s slice:…… for architecture armv7s的错误。是因为此版本的库还不支持arm7s的环境,将Build Settings项中的Valid ArchiteCtures中的arm7s删除即可解决。
10. 编译器提示类似Duplicate symbol _NN_Decode in /Users/…/libPPUserPayKit.a(UPPayRsa_nn.o) for architecture armv7或Command /Developer/…/bin/llvm-g++-4.2 failed with exit code 1的错误。则是因为C++混编模式引起的,您可以将Build Settings 设置项里面的Other Linker Flags设置成空即可。
本地化字符串文件不能使用。
【1.】清理建文件夹,删除里面的一切DerivedData( 位于“/Users/个人PC用户名/Library/Developer/Xcode/DerivedData”下的缓存文件占了很大的内存空间),删除里面的程序,重新启动Xcode,重建工程。
【2.】去项目目录里,手动地创建两 infoplist.strings 的文件,第一次在 en.lproj文件夹和第二次在 fr.lproj文件夹。
报错 |
---|
未引入库文件( .m文件)
一般是没有引入相应的库文件(或 .m文件)。在引入三方库的时候都会提供 .a文件或framework,里面装的是第三方库所提供的对 .h文件的实现,只有加进去了才能找到 .h文件里面方法的实现。
解决办法是,检查工程里是否已经把对应的文件加了进来。若是已经加了,则在build phases底下的compile sources中加入相应的 .m文件,或者在link binary with libraries中加入相应的库文件。
Thread 1: signal SIGABRT
往往是一个对象被释放了多次(多次释放)。大多是粗心所致。
有一种情况称为过渡释放,比较隐蔽。
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
self.myData = [userDefault objectForKey:@"myCollectData"];
这种写法是错误的!我们自己并没有将内存分配给myData。所以 编译器对这块内存有控制权,而不是我们自己!
所以,在某个时刻,我们不能保证myData是否有效。更不能保证程序到最后 进行了“[_myData release];”操作!
根据 “谁分配,谁管理” 的原则!我改写成了如下形式:
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
NSData * my_data = [userDefault objectForKey:@"myCollectData"];
self.myData = [NSData alloc] initWithData:my_data];
确保进行了初始化!这样才正确!
manager start failed :
在 info.plist 中必须添加 “Bundle display name”
在使用 百度地图开发平台 时
需要直接用“source code”方式,打开info.plist并添加:
<key>CFBundleDisplayName</key>
<string>BaiduDemo</string>
便可以了 !!! (当然DisplayName(展示名字)是可变的 )
iOS10 点击有关 权限访问 直接Crash了
并在控制台输出了一些信息:
This app has crashed because it attempted to access privacy-sensitive
data without a usage description. The app's Info.plist must contain
an NSContactsUsageDescription key with a string value explaining to
the user how the app uses this data.
意思:你需要在info.plist文件中 添加一个“NSContactsUsageDescription ”的Key,并为Value添加一个描述。
1,在项目中找到info.plist文件,右击 “Open As”,以“Source Code” 的形式打开;
2,分别复制 以下 Value 和Key,Key 是一定不能错,Value 可以随便填写;
3,在info.plist 文件上 复制上,然后 保存。并且Clean 工程就好了。
// 相机权限描述:
<key>NSCameraUsageDescription</key>
<string>cameraDesciption</string>
// 通信录:
<key>NSContactsUsageDescription</key>
<string>contactsDesciption</string>
// 麦克风:
<key>NSMicrophoneUsageDescription</key>
<string>microphoneDesciption</string>
// 相机:
<key>NSPhotoLibraryUsageDescription</key>
<string>photoLibraryDesciption</string>
PNG图片格式错误
打包的时候,出现这个警告!意思是:png file invalid;从新导入一下png图片就ok了。但是是 要知道是哪张图片出问题了。
Message from debugger: Terminated due to signal 9
原因:在调试的时候主动了结束了程度,如上滑、点击按钮等结束了程序。
Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo={NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}
在默认情况下,AFNetworking的网络请求都是以json的数据格式返回数据。因此,在客户端也会以json为默认格式。如果返回的数据为非json标准格式,则会报此错。
我们只需要在发送请求前加入下面代码:
manager.responseSerializer = [AFHTTPResponseSerializer serializer]。
[__NSCFNumber length]: unrecognized selector sent to instance 0x8b3c310’
问题原因:NSNumber类型与NSString类型冲突。
解决方法:将所需要的相应属性的NSString类型改为NSNumber类型(将属性类型设置为⭐️NSNumber), 调用时在将NSNumber类型 转成 NSString类型即可。
linker command failed with exit code 1 (use -vto see invocation)
原因:导入了.m的头文件,导致同时有两个一样的.m文件在编译
Xcode真机测试报错:Could not launch...
解决方案一:1.删除/Users/(用户名)/Library/Developer/Xcode/DerivedData/(对应APP程序)文件夹;
2.拔掉手机,删除对应的APP程序,完全退出Xcode工具;
3.重新连接手机进行真机测试。
解决方案二:进行过真机抓包测试,关闭HTTP代理。
解决方案三:1.选择手机中“设置” -> “通用” -> “设备管理” -> 选择自己对应的开发商应用 -> “删除应用”;
2.重新运行Xcode中的程序,这个时候应该还会报错;
3.再次进入自己对应的开发商应用 -> “验证应用”;
4.再次运行Xcode中的程序就OK了。
Warning! ivar size mismatch in StepUICollectionView_ of 80 bytes - can't change the superclass.
解决:1.搜索StepUICollectionView,找到.m文件
2.搜索char filler,在[]中的数据上加上警告提示的数据
Xib连线问题
问题原因:Xib中连线出问题
没实现某方法
问题原因:某个对象没有实现某个方法
警告 |
---|
Data argument not used by format string
“stringWithFormat:”里面没有idx对应的格式引起的。