NSLog+NSArray
问题
- 如果JSON数据中有中文,输出的是经过Unicode编码的内容,无法识别.
解决
- 定义NSArray和NSDictionary的分类,重写系统方法
descriptionWithLocale
,重写此方法不需要导入头文件. descriptionWithLocale
,当NSLog输出数组或字典时,系统会自动调用这个方法.-
在
descriptionWithLocale
方法中,遍历元素,并打印元素. -
声明
#import <Foundation/Foundation.h>
@interface NSArray (Log)
@end
@interface NSDictionary (Log)
@end
- 实现
#import "NSArray+Log.h"
@implementation NSArray (Log)
/// 打印数组和字典时会自动调用这个方法,在分类中重写这个方法时,在使用时不需要导入头文件
- (NSString *)descriptionWithLocale:(id)locale
{
// 创建可变字符串
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:(id)locale
{
// 创建可变字符串
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
-
提示 :
- 一个文件中其实是可以定义多个类的声明和实现的
-
使用 : 把这个文件放进工程中即可,今后无论打印数组还是字典,都可以看到原始的中文.不需要导入头文件.