服务器返回中文乱码问题

-(NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level; 之前是用 -(NSString *)descriptionWithLocale:(id)locale,
但是自从XCode之后,该方法不调用了,只能用上面的方法了
注意:
不需要.h文件,因为通常写分类是添加新的方法,新的方法要写在.h文件中声明,而且使用里面的方法必须要导入该分类的.h文件,但是这个是重写原类的原有方法,因此不需要.h文件
编译时,只会编译所有的.m文件,当发现你重写了方法,到时就会优先调用分类中重写的方法

//随意建一个.m文件即可,比如FoundLog.m
#import <Foundation/Foundation.h>
@implementation NSDictionary (Log)
/**
 该方法就是该NSArray(NSExtendedArray)分类中的一个方法
 当打印字典/数组时会调用字典/数组的这个方法,这个方法返回什么他就打印什么
 -(NSString *)descriptionWithLocale:(id)locale
 但是Xcode8以后,不会调用上面那个方法了,但会调用下面这个方法
 */
- (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level
{
    NSMutableString *string = [NSMutableString string];
    // \n换行符,\t首行缩进
    // 开头有个{
    [string appendString:@"{\n"];
    // 遍历所有的键值对
    [self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
        //appendFormat:拼接内容,可以传参数
        [string appendFormat:@"\t%@", key];
        [string appendString:@" : "];
        [string appendFormat:@"%@,\n", obj];
    }];
    // 结尾有个}
    [string appendString:@"}"]; 
    // 查找最后一个逗号
    //NSBackwardsSearch反过来搜索,正常情况下是按顺序搜索,只会搜索到第一个","
    NSRange range = [string rangeOfString:@"," options:NSBackwardsSearch];
    //打印[]空数组时会报错
    if (range.location != NSNotFound)
    [string deleteCharactersInRange:range];
    return string;
}
@end
@implementation NSArray (Log)
- (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level
{
    NSMutableString *string = [NSMutableString string];
    // 开头有个[
    [string appendString:self.count ? @"[\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

Table of Contents