美文网首页iOS 进阶学习
解决Xcode打印 NSArray 和 NSDictionary

解决Xcode打印 NSArray 和 NSDictionary

作者: 下班不写程序 | 来源:发表于2018-11-20 21:20 被阅读116次

    开发一款App少不了网络请求,在测试方调的过程中更避免不了使用Xcode打印log日志来调试,对于一些返回信息,系统默认输出的是经过Unicode编码的内容,这时候就需要汉化使其明了,之前都是添加NSArray和NSDictionary的分类来完成的,但是Xcode9之后,系统提供的方法发生了一些变化,总结如下:

    Xcode9.0之前控制台打印中文方法
    #import "NSArray+Log.h"
    @implementation NSArray (Log)
     // 只需要在分类中,重写这个方法的实现,不需要导入分类文件就会生效,字典也是一样
    - (NSString *)descriptionWithLocale:(id)locale
    
    但Xcode9.0之后打印数组与字典居然不调用以上方法了,why?查阅了官方api的更新文档,上面是这样描述的:
    Developer Documetation

    总结

    也就是说Xcode9.0之后推出了新的API,当你调用这个新的api时,会自动判断以上四种情况来自动的帮助我们转译或做处理. 而原来的api则会只在满足自己的元素响应时,才会被调用.下面是更新后的分类,导进项目中即可使用;也可以创建分类直接copy过去,效果一样.

    文件下载地址:https://github.com/LDisguiser/XcodeLog

    #import "NSArray+Log.h"
    
    @implementation NSArray (Log)
    - (NSString *)descriptionWithLocale:(nullable id)locale indent:(NSUInteger)level{
        
        NSMutableString *stringM = [NSMutableString string];
        [stringM appendString:@"(\n"];
        
        [self enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            
            [stringM appendFormat:@"\t%@,\n",obj];
        }];
        
        [stringM appendString:@")\n"];
        
        return stringM;
    }
    
    @end
    
    @implementation NSDictionary (Log)
    - (NSString *)descriptionWithLocale:(nullable id)locale indent:(NSUInteger)level{
        
        NSMutableString *stringM = [NSMutableString string];
        [stringM appendString:@"{\n"];
    
        [self enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
            
            [stringM appendFormat:@"\t%@ = %@;\n",key,obj];
        }];
        
        [stringM appendString:@"}\n"];
        
        return stringM;
    }
    
    @end
    

    .End

    相关文章

      网友评论

        本文标题:解决Xcode打印 NSArray 和 NSDictionary

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