Error Note1:错误修复笔记

1.遍历同时修改数组内容导致崩溃

bugly上bug提醒如下图所示,经检查发现,可能是页面上数据加载惹得祸. 页面加载过程是这样的,首先进入页面,初始化页面,将本地数据加载到array中刷新tableView,同时执行网络请求,构建array完了将数据放在tableView上面. 可能出现问题的地方时, 初始化页面时候,tableView遍历array将数据放在tableView上,遍历期间获取到网络请求的数据,同时开始处理array,然后就导致这个崩溃, bugly提醒此bug出现在ios 10-10.2, 我自己项目崩溃的ios系统版本也在此范围内.

1190061-20180531130539214-1574754768.png

2.DispatchQueue.once的注意事项

最近的项目开发中就犯了一个错误. 某个方法在多个地方都可能会被调用, 这个方法中有一句DispatchQueue.once代码, 代码中需要用到成员变量是可空类型, 于是就出问题了, 首次执行到DispatchQueue.once中代码时, 如果用到的成员变量是nil, 那么会导致初始化失败. 而后续再次给成员变量赋值后, 重新调用这个方法, DispatchQueue.once代码不会被执行, 导致程序出错. 正确的解决方案是, DispatchQueue.once代码中不要使用可选类型!!!

3.处理webView中alert不当导致崩溃

事情是这样的, 在App的菜单栏其中有一栏内容是一个h5网页(地图页,地图获取定位失败网页会alert提醒). 我在runJavaScriptAlertPanelWithMessage方法中接收alert弹窗并使用系统的UIAlertController弹窗提醒用户, 用户点击确定或取消时候执行completionHandler闭包, 弹出UIAlertController代码是这样的self.present(alertController, animated: true, completion: nil), 问题就出在这行代码, 当用户点击此菜单选项, 尚未弹出alert之前, 用户切换了菜单选项, 那么就会导致self不在window层级中, 程序崩溃! 解决方案: 查找当前应用最顶层的一个控制器来弹窗提醒.

1190061-20180531134717956-143884760.png

4.网络请求错误码汇总

线上环境的软件报错code=4. 最终查到对应错误为public var kCFStreamErrorSOCKS5SubDomainMethod: Int { get } /* Error code is the server's desired negotiation method*/, 但是最终还是不晓得到底是什么错误. 查找错误码对应错误过程中也废了不少的周折,这里统一纪录一下错误码对应的错误信息吧!

目前我了解到的错误码有三种类型CFNetworkErrors, CFSocketErrorkCFStreamError*开头对应的错误码.

查找错误码的方法: 使用对应的错误码初始化enum类型, 获取变量类型.

5.NSObjectSafe解决OCSelector等崩溃问题

使用这个仓库可以拦截大部分的数组越界, 找不到方法等的oc崩溃问题;

https://github.com/jasenhuang/NSObjectSafe

6.if判断常量要写在左边

if判断常量写在左边是为了避免隐藏的bug.

// 如下代码, 如果无意少些了一个等号, 则就会产生难以发现的bug; 如果将常量写在左边可以避免这样的问题
// 因为在编程语言中都是禁止常量作为变量名的.
if (x = 2) {
...
}

转载于:https://www.cnblogs.com/dev-walden/p/9116179.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值