正常情况下,调试过程中使用NSlog打印信息时,显示的都是英文字符,但实际上,通过服务器返回的字符大部分是中文的,这时候显示的却是不容易看懂的unicode码,所以为了方便调试,需要进行转换,即直接显示中文,如示例图。
实现原理,重新NSDictionary、NSArray中的方法"- (NSString *)descriptionWithLocale:(id)locale",即创建NSDictionary、NSArray的类别:NSDictionary+Log、NSArray+Log。
代码内容:
#import "NSDictionary+Log.h"
@implementation NSDictionary (Log)
- (NSString *)descriptionWithLocale:(id)locale
{
NSMutableString *string = [NSMutableString string];
// 开头有个{
[string appendString:@"{\n"];
// 遍历所有的键值对
[self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
[string appendFormat:@"\t%@", key];
[string appendString:@" : "];
[string appendFormat:@"%@,\n", obj];
}];
// 结尾有个}
[string appendString:@"}"];
// 查找最后一个逗号
NSRange range = [string rangeOfString:@"," options:NSBackwardsSearch];
if (range.location != NSNotFound)
{
[string deleteCharactersInRange:range];
}
return string;
}
@end
#import "NSArray+Log.h"
@implementation NSArray (Log)
- (NSString *)descriptionWithLocale:(id)locale
{
NSMutableString *string = [NSMutableString string];
// 开头有个[
[string appendString:@"[\n"];
// 遍历所有的元素
[self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[string appendFormat:@"\t%@,\n", obj];
}];
// 结尾有个]
[string appendString:@"]"];
// 查找最后一个逗号
NSRange range = [string rangeOfString:@"," options:NSBackwardsSearch];
if (range.location != NSNotFound)
{
[string deleteCharactersInRange:range];
}
return string;
}
@end
#import "NSDictionary+Log.h"
#import "NSArray+Log.h"