美文网首页iOS
iOS更优雅的NSError的处理流程

iOS更优雅的NSError的处理流程

作者: 熊猫人和熊猫君 | 来源:发表于2018-06-28 19:47 被阅读0次

背景

Error的产生与传递基本上是贯穿我们整个APP开发,友好的错误提示,必要的error信息统计是很有必要,两年前改造我司的APM系统的时候就对error信息的上报做了一次重构。

一个典型的Error处理流程【优化前】 image.png

第一个产生的Error为底层API函数产生,仅接着可能是的网络层,数据解析层,然后业务层,UI层都可能长生Error!

一次业务处理可能产生多个Error

问题:我们使用哪一个error呢?很多时候error信息保留不全要不就只保留了最后一个或自己定义一个。

思考一个问题

怎么能完整的按优先级按类型的把Error信息传递出来

优化后的Error处理流程

1.居于原始Error的基础上扩展带上,上一级的Error,使用的关键 NSUnderlyingErrorKey,存储结构图如下: image.png

实现可参考AF库:

static NSError * AFErrorWithUnderlyingError(NSError *error, NSError *underlyingError) {
    if (!error) {
        return underlyingError;
    }
    if (!underlyingError || error.userInfo[NSUnderlyingErrorKey]) {
        return error;
    }
    NSMutableDictionary *mutableUserInfo = [error.userInfo mutableCopy];
    mutableUserInfo[NSUnderlyingErrorKey] = underlyingError;
    return [[NSError alloc] initWithDomain:error.domain code:error.code userInfo:mutableUserInfo];
}
2.按调用层划分层错误类型 image.png

3.NSErorr最终构成

{
    Domain: com.yourapp.UI
    Code: 3XXX
    ...
    UserInfo: {
        Domain: com.yourapp.managerX
        Code: 2XXX
        …
        UserInfo: {
            Domain: com.yourapp.apiLib
            Code: 1XXX
            ...
            UserInfo: {
                Domain: NSERLErrorDomain
                Code: 403
                ...
            }
        }
    }
}

收益

1.不丢失任何Error信息
2.方便调试,不管是本地log或者远程log带上全面的error信息。
3.根据Error Domain直观的定位问题模块,APM系统中各调用模块失败率,在其饼状图中一目了然。

我司系统一瞥

image.png

总结:规范的错误码,标准的错误划分,甚至是位置标记,都将极大的提高问题定位效率,提升代码质量。当然做好做完整远远不是真简单,但核心在这。

相关文章

  • iOS更优雅的NSError的处理流程

    背景 Error的产生与传递基本上是贯穿我们整个APP开发,友好的错误提示,必要的error信息统计是很有必要,两...

  • NSError对照码

    前言整理一下在iOS开发中NSError的错误代码 NSError NSError是系统错误信息类 初始化方法两个...

  • iOS NSError

  • NSError分析

    NSError分析 写在前面 在iOS开发中,NSError的使用非常常见,使用也比较简单,也正因为简单,所以对这...

  • iOS NSError详解

    一、NSError是系统错误信息类 两种初始化方法:其中,domain 不能为空 dict可以为空 错误域主要有四...

  • iOS中NSError的使用

      NSError 来对错误信息进行封装,它主要由3部分内容组成: domain 错误发生域 code 错误码 u...

  • iOS面试题大全

    iOS面试题大全-点亮你iOS技能树 iOS 事件处理机制与图像渲染过程 iOS界面渲染流程分析 wechat ...

  • iOS 响应链

    iOS开发 - 事件传递响应链iOS 响应者链,事件的传递事件传递之响应链Cocoa Touch事件处理流程--响...

  • iOS封装的流程化处理

    最近接触到一个项目,代码中将函数一直传递,传递了6-7层只为了让结果通过这个函数来执行。就像是在一个流程中的公共参...

  • 异常捕获

    Swift异常处理的历史由来 Swift1.0版本 Cocoa Touch 的 NSError ,Swift并没有...

网友评论

    本文标题:iOS更优雅的NSError的处理流程

    本文链接:https://www.haomeiwen.com/subject/xgxgyftx.html