总结自己在开发过程中遇到的BUG
第十三个错误:
- 错误描述:控制器不能加载到UITableView
- 解决方法:storyBoard的控制器与写代码的控制器不对应,改为对应的控制器即可。。
第十四个错误:iOS9 https协议
- 原因:从iOS9起,新特性要求App访问网络请求,要采用 HTTPS 协议。
- 解决方法:如果仍想要使用HTTP协议,解决办法如下:
- 1,在Info.plist中添加 NSAppTransportSecurity 类型 Dictionary ;
- 2,在 NSAppTransportSecurity 下添加 NSAllowsArbitraryLoads 类型Boolean ,值设为 YES
第十五个错误:(直接拖入动画框架POP的错误)
-
第十六个错误:网络请求出错
第十七个错误:NAN的错误
第十八个错误:未定义的错误
- 原因:没有定义某个属性或者类
- 解决方法:找到这个东西,定义一下即可
第十九个错误:bitcode的错误
原因:得到的信息是引入的一个第三方库不包含bitcode。
解决方法:要么让第三方库支持,要么关闭target的bitcode选项。如果这个库不支持bitcode,暂时只能设置ENABLE_BITCODE为NO。
![Upload Snip20160601_24.png failed. Please try again.]-
补充:理解Bitcode:一种中间代码。实际上,在Xcode 7中,我们新建一个iOS程序时,bitcode选项默认是设置为YES的。我们可以在”Build Settings”->”Enable Bitcode”选项中看到这个设置。
第二十个错误:真机调试下静态库架构问题
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_WKWebView", referenced from:
objc-class-ref in BSWebViewController.o
ld: symbol(s) not found for architecture x86_64
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_BSWebViewController", referenced from:
objc-class-ref in BSMeController.o
ld: symbol(s) not found for architecture x86_64
第二十一个错误:使用FMDB遇到的错误(SWift)
- 原因:类型的表达式是不明确的,没有更多的上下文
-
✅解决方法:找到这个东西,让它类型明确即可
第二十二个错误:设置状态栏出现的警告错误
- ❎错误描述:CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
- 原因:View controller-based status bar appearance设置为NO
- ✅解决方法:修改方式将View controller-based status bar -appearance设置为YES,然后使用新的方式来实现状态栏的样式。
- (UIStatusBarStyle)preferredStatusBarStyle;
- (UIViewController *)childViewControllerForStatusBarStyle;
- (void)setNeedsStatusBarAppearanceUpdate
第二十三个错误:莫名错误--静态库不支持某种架构
-
❎错误:
-
✅解决
第二十四个错误:莫名错误--duplicate symbols for architecture x86_64(重复编译)
- ❎错误:iOS开发之duplicate symbols for architecture x86_64错误
- ✅解决:根据提示找出重复定义的类
- 总结了一下,出现duplicate出这个错误一般有两种情况:
第一种情况:在工程中重复导入了某一个类或文件,这一般出现在你添加第三方库的时候比较多,在不知道的情况下又导入了一次相同的类。
第二种情况:工程中在#import引入头文件的时候,将#import "XXX.h" 写成了#import "XXX.m"。错误的引入.m头文件 ```
第二十五个错误:(友盟分享)_rkl_NSExceptionForRegex in MOBFoundation
- ❎错误描述:
Undefined symbols for architecture x86_64:
"_u_errorName", referenced from:
_rkl_NSExceptionForRegex in MOBFoundation
_rkl_userInfoDictionary in MOBFoundation
_cm_rkl_NSExceptionForRegex in AGCommon
_cm_rkl_userInfoDictionary in AGCommon
"_u_strlen", referenced from:
_rkl_userInfoDictionary in MOBFoundation
_cm_rkl_userInfoDictionary in AGCommon
"_uregex_setText", referenced from:
-[MOBFRKLBlockEnumerationHelper initWithRegex:options:string:range:error:] in MOBFoundation
_rkl_performRegexOp in MOBFoundation
_rkl_clearCachedRegexSetTo in MOBFoundation
-[CMRKLBlockEnumerationHelper initWithRegex:options:string:range:error:] in AGCommon
_cm_rkl_performRegexOp in AGCommon
_cm_rkl_clearCachedRegexSetTo in AGCommon
"_uregex_start", referenced from:
_rkl_performRegexOp in MOBFoundation
_rkl_findRanges in MOBFoundation
_rkl_search in MOBFoundation
_cm_rkl_performRegexOp in AGCommon
_cm_rkl_findRanges in AGCommon
_cm_rkl_search in AGCommon
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
-
✅解决(other link)-licucore
-
小结:
- 可能会遇到这几种错误:
Undefined symbols for architecture armv7
Undefined symbols for architecture armv7s
Undefined symbols for architecture arm64
Undefined symbols for architecture i386
Undefined symbols for architecture x86_64
- 检查静态库的CPU架构支持命令:
lipo -info xxxxx.a
- 找出不支持arm64的静态库
find . -name *.a -exec lipo -info "{}"
第二十六个错误:Xcode8运行报错--签名必须加入某个team
- ❎错误描述
- ✅解决
第二十七个错误:Swift3.0归档报错--需要强引用
- ❎错误描述
- ✅解决
- 删除[weak self]即可
第二十八个错误:使用第三方框架PopoverSwift报错--需要约束
- ❎错误描述
- ✅解决
- 将按钮加入某个View即可,反正得让按钮有父控件
第二十九个错误: Swift3.0使用NSUserDefaults存储Bool类型
- ❎错误描述
-
[NSUserDefaults setObject:forKey:]: attempt to insert non-property list object
-
- ✅解决
- 首先, 认为这种错误的原因是插入了不识别的数据类型,NSUserDefaults支持的数据类型有NSString、 NSNumber、NSDate、 NSArray、NSDictionary、BOOL、NSInteger、NSFloat等系统定义的数据类型。
然而并不是这样,我在取值之前先要存储一下该Bool类型,代码展示
- 首先, 认为这种错误的原因是插入了不识别的数据类型,NSUserDefaults支持的数据类型有NSString、 NSNumber、NSDate、 NSArray、NSDictionary、BOOL、NSInteger、NSFloat等系统定义的数据类型。
SaveTools.mg_SaveToLocal(value: isAddMoveAnimation, key: "isAddMoveAnimation") // 就是这句代码,先要存储一下该Bool类型
isAddMoveAnimation = SaveTools.mg_getLocalData(key: "isAddMoveAnimation") as! Bool
titleLabel?.text = titleStr ?? "其他工作"
if isAddMoveAnimation == false {
self.addMoveAnimation(label: titleLabel!)
isAddMoveAnimation = true
SaveTools.mg_SaveToLocal(value: isAddMoveAnimation, key: "isAddMoveAnimation")
}
第三十个错误: Swift3.0使用导航栏给item添加约束报错
- ❎错误
- 描述:当给导航栏的左边Item或右边Item以及title自定义控件,并且自定义按钮添加了约束,点击push其他控制器就会报错。。。 (如下错误)
- ✅解决:删掉约束,使用frame
-
第三十一个错误: 真机使用KVO报错
- ❎错误
Terminating app due to uncaught exception 'NSRangeException', reason: '
<chart2.HomeVC 0x17d148c0> for the key path "frame" from
<chart2.HomeVC 0x17d148c0> because it is not registered as an observer.'
First throw call stack: 内存泄漏
(0x297a3137 0x37833c77 0x297a307d 0x2a43fcc9 0x2a43f6db 0x103f2c 0x1040dc 0x3784e1a9 0x296b2729 0x2cdd2fb9 0x2976926d 0x29766951 0x29766d53 0x296b29a1 0x296b27b3 0x30e8b1a9 0x2ce3d695 0x157054 0x37ddbaaf)
- ❎错误
- ✅解决:找到对应的监听者,之前移除的是
self.removeObserver(self, forKeyPath: "frame")
,报错。所以不要移除错了
第三十二个错误: 项目一段时间没用,莫名报错
- ❎错误
clang: error: no such file or directory: '/Users/ZBKF001/Desktop/工作目录/Chart/Chart/LMReport/NSIndexPath+LMReport.m' clang: error: no input files
- ✅解决:莫名其妙的错误 clear 强退XCode 删除缓存
第三十三个错误:设置导航栏全局属性的BUG
-
❌错误
-
错误描述:
reason: '-[_SwiftValue pointSize]: unrecognized selector sent to instance 0x600000442550'
-
✅解决:仔细看注释掉的代码和新增的代码
第三十四个错误:Swift导入编译文件两次的错误
- ❌错误
-
错误描述:reason:
“filename xxx Used twice”
- ✅解决:在Build Phases -> Compile Sources 删除其中一个编译的文件即可
第三十五个错误:证书真机安装安装失败
-
❌错误
-
✅解决:在项目下Edit Scheme -> Run -> build Configuration 不小心调成release模式了 改回来Debug就行了.
第三十六个错误:打包上传失败
-
❌错误:因为没有在iTunes connect 构建版本,那些ID和套装ID未填写,就打包上传,报此错误
- ✅解决:在iTunes connect 构建版本就行了.然后再上传就ok了.
第三十七个错误:Modal错误
- ❌错误:which is already presenting *
Warning: Attempt to present * on * which is already presenting *
Warning: Attempt to present (要被presented的控制器) on (哪个控制器来presenting) which is already presenting (已经被presenting的控制器)
self: 是被presented出来的控制器,
self.presentingViewController: 看看是谁把self给presenting出来
RPLog(@"%@ - %@", self.presentingViewController, [UIApplication sharedApplication].keyWindow.rootViewController);
打印结果: <RPNavigationController: 0x789d0330> - <RPNavigationController: 0x789d0330>
ProductionReport[98607:30384979] Warning: Attempt to present <UIAlertController: 0x7f8d0ae431b0> on <ProductionReport.QRCodeViewController: 0x7f8d0ac04af0> which is already presenting (null)
- ✅解决:
- 结论: popver中的控制器, 其实是通过窗口的根控制器presenting出来的, 所以要想窗口的根控制器再presenting其他控制器,需要先dismiss掉原来presenting的控制器,
第三十八个错误:高德地图错误
- ❌错误:Undefined symbols for architecture x86_64: *
Undefined symbols for architecture x86_64:
"_OBJC_METACLASS_$_GLKView", referenced from:
_OBJC_METACLASS_$_MAMapRender in MAMapKit(MAMapKit-x86_64-master.o)
"_OBJC_CLASS_$_GLKView", referenced from:
_OBJC_CLASS_$_MAMapRender in MAMapKit(MAMapKit-x86_64-master.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
- ✅解决:增加GLKit.framework系统库就可以了
第三十九个错误:高德地图错误
- ❌错误:“项目名-Swift.h”文件找不到
OC和Swift混编,“项目名-Swift.h”文件找不到
- ✅解决:target->build setting->packaging->product module name
参考解决链接:OC和Swift混编,“项目名-Swift.h”文件找不到
将product module name换成“product module name-Swift.h”。如果你的product module name有问题,例如是中文,特殊字符,你需要改为合法字符。改过之后,需要删除DerivedData文件夹,重新编译。。