服务器返回中文乱码问题
- 思路:
- 随意建立一个.m文件即可,比如FoundLog.m
- 分别重写NSArray/NSDictionary原类的方法:
-(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