1.中文输出
对于服务器返回的数据,解析之后直接打印,如果数据中原本有中文,可能会出现中文乱码的结果:

为了避免这个问题,可以通过类别来重写系统和打印的结果:
步骤:
1.新创建文件名:Foundation+Log.m后缀的这个文件,对头就是.
m文件
2.然后把一下源码全部拷贝进去就行了
Foundation+Log.m
1 //
2 // NSDictionary+Log.m
3 // 01-掌握-多值参数和中文输出
4 //
5
6 #import <Foundation/Foundation.h>
7
8 // 重写系统的打印方法,
9 // 需要知道的是NSDictionary和NSArray各自都有打印方法
10 // 也就是说,你重写了NSArray打印重写方法,打印NSArray对象才会执行重写的方法
11
12 // 如果是通过子类来重写父类系统的方法,那么使用的时候就需要导入这个子类
13 // 但是通过类别重写系统方法,就不需要import导入,因为系统中导入了已经有了同名的被重写的方法了,系统会优先加载类别里的重写的方法,连.h声明文件都可以不用了,因为系统中已经有.h声明文件
14
15 @implementation NSDictionary (Log)
16
17 //控制输出:对字典或者是数组进行排版
18 -(NSString *)descriptionWithLocale:(id)locale
19 {
20 NSMutableString *string = [NSMutableString string];
21 //设置开始
22 [string appendString:@"{\n"];
23
24 //设置key-value
25 [self enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
26 [string appendFormat:@"%@:",key];
27 [string appendFormat:@"%@,\n",obj];
28 }];
29 //设置结尾
30 [string appendString:@"}"];
31
32 //删除最后的逗号
33 NSRange range = [string rangeOfString:@"," options:NSBackwardsSearch];
34 if (range.location != NSNotFound) {
35 [string deleteCharactersInRange:range];
36 }
37 return string;
38 }
39
40 /*
41 -(NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level
42 {
43 NSMutableString *string = [NSMutableString string];
44 //设置开始
45 [string appendString:@"{"];
46
47 //设置key-value
48 [self enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
49
50 [string appendFormat:@"%@:",key];
51 [string appendFormat:@"%@",obj];
52 }];
53 //设置结尾
54 [string appendString:@"}"];
55 return string;
56 }
57 */
58 @end
59
60
61 @implementation NSArray (Log)
62
63 //控制输出:对字典或者是数组进行排版
64 -(NSString *)descriptionWithLocale:(id)locale
65 {
66 NSMutableString *string = [NSMutableString string];
67 //设置开始
68 [string appendString:@"["];
69
70 //设置key-value
71 [self enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
72 [string appendFormat:@"%@,",obj];
73
74 }];
75 //设置结尾
76 [string appendString:@"]"];
77
78 NSRange range = [string rangeOfString:@"," options:NSBackwardsSearch];
79 if (range.location != NSNotFound) {
80 [string deleteCharactersInRange:range];
81 }
82
83 return string;
84 }
85
86 @end

网友评论