Xcode控制檯輸出中文
阿新 • • 發佈:2018-12-06
建立一個.m檔案,然後將一下程式碼加入.m檔案中即可實現控制檯輸出中文,具體程式碼如下:
#ifndef Release @implementation NSSet(Log) - (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level
{
NSMutableString *desc = [NSMutableString string]; NSMutableString *tabString = [[NSMutableString alloc] initWithCapacity:level];for (NSUInteger i = 0; i < level; ++i) { [tabString appendString:@"\t"]; } NSString *tab = @"\t"; if (level > 0) { tab = tabString; } [desc appendString:@"\t{(\n"]; for (id obj in self) { if ([obj isKindOfClass:[NSDictionary class]]|| [obj isKindOfClass:[NSArray class]] || [obj isKindOfClass:[NSSet class]]) { NSString *str = [((NSDictionary *)obj) descriptionWithLocale:locale indent:level + 1]; [desc appendFormat:@"%@\t%@,\n", tab, str]; } else if ([obj isKindOfClass:[NSString class]]) { [desc appendFormat:@"%@\t\"%@\",\n", tab, obj]; } else if ([obj isKindOfClass:[NSData class]]) { // if is NSData,try parse NSError *error = nil; NSObject *result = [NSJSONSerialization JSONObjectWithData:obj options:NSJSONReadingMutableContainers error:&error]; if (error == nil && result != nil) { if ([result isKindOfClass:[NSDictionary class]] || [result isKindOfClass:[NSArray class]] || [result isKindOfClass:[NSSet class]]) { NSString *str = [((NSDictionary *)result) descriptionWithLocale:locale indent:level + 1]; [desc appendFormat:@"%@\t%@,\n", tab, str]; } else if ([obj isKindOfClass:[NSString class]]) { [desc appendFormat:@"%@\t\"%@\",\n", tab, result]; } } else { @try { NSString *str = [[NSString alloc] initWithData:obj encoding:NSUTF8StringEncoding]; if (str != nil) { [desc appendFormat:@"%@\t\"%@\",\n", tab, str]; } else { [desc appendFormat:@"%@\t%@,\n", tab, obj]; } } @catch (NSException *exception) { [desc appendFormat:@"%@\t%@,\n", tab, obj]; } } } else { [desc appendFormat:@"%@\t%@,\n", tab, obj]; } } [desc appendFormat:@"%@)}", tab]; return desc; } @end @implementation NSArray (Log) - (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level
{
NSMutableString *desc = [NSMutableString string]; NSMutableString *tabString = [[NSMutableString alloc] initWithCapacity:level]; for (NSUInteger i = 0; i < level; ++i) { [tabString appendString:@"\t"]; } NSString *tab = @""; if (level > 0) { tab = tabString; } [desc appendString:@"\t(\n"]; for (id obj in self) { if ([obj isKindOfClass:[NSDictionary class]] || [obj isKindOfClass:[NSArray class]] || [obj isKindOfClass:[NSSet class]]) { NSString *str = [((NSDictionary *)obj) descriptionWithLocale:locale indent:level + 1]; [desc appendFormat:@"%@\t%@,\n", tab, str]; } else if ([obj isKindOfClass:[NSString class]]) { [desc appendFormat:@"%@\t\"%@\",\n", tab, obj]; } else if ([obj isKindOfClass:[NSData class]]) { NSError *error = nil; NSObject *result = [NSJSONSerialization JSONObjectWithData:obj options:NSJSONReadingMutableContainers error:&error]; if (error == nil && result != nil) { if ([result isKindOfClass:[NSDictionary class]] || [result isKindOfClass:[NSArray class]] || [result isKindOfClass:[NSSet class]]) { NSString *str = [((NSDictionary *)result) descriptionWithLocale:locale indent:level + 1]; [desc appendFormat:@"%@\t%@,\n", tab, str]; } else if ([obj isKindOfClass:[NSString class]]) { [desc appendFormat:@"%@\t\"%@\",\n", tab, result]; } } else { @try { NSString *str = [[NSString alloc] initWithData:obj encoding:NSUTF8StringEncoding]; if (str != nil) { [desc appendFormat:@"%@\t\"%@\",\n", tab, str]; } else { [desc appendFormat:@"%@\t%@,\n", tab, obj]; } } @catch (NSException *exception) { [desc appendFormat:@"%@\t%@,\n", tab, obj]; } } } else { [desc appendFormat:@"%@\t%@,\n", tab, obj]; } } [desc appendFormat:@"%@)", tab]; return desc; } @end @implementation NSDictionary (Log) - (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level
{
NSMutableString *desc = [NSMutableString string]; NSMutableString *tabString = [[NSMutableString alloc] initWithCapacity:level]; for (NSUInteger i = 0; i < level; ++i) { [tabString appendString:@"\t"]; } NSString *tab = @""; if (level > 0) { tab = tabString; } [desc appendString:@"\t{\n"]; // Through array, self is array for (id key in self.allKeys) { id obj = [self objectForKey:key]; if ([obj isKindOfClass:[NSString class]]) { [desc appendFormat:@"%@\t%@ = \"%@\",\n", tab, key, obj]; } else if ([obj isKindOfClass:[NSArray class]] || [obj isKindOfClass:[NSDictionary class]] || [obj isKindOfClass:[NSSet class]]) { [desc appendFormat:@"%@\t%@ = %@,\n", tab, key, [obj descriptionWithLocale:locale indent:level + 1]]; } else if ([obj isKindOfClass:[NSData class]]) { NSError *error = nil; NSObject *result = [NSJSONSerialization JSONObjectWithData:obj options:NSJSONReadingMutableContainers error:&error]; if (error == nil && result != nil) { if ([result isKindOfClass:[NSDictionary class]] || [result isKindOfClass:[NSArray class]] || [result isKindOfClass:[NSSet class]]) { NSString *str = [((NSDictionary *)result) descriptionWithLocale:locale indent:level + 1]; [desc appendFormat:@"%@\t%@ = %@,\n", tab, key, str]; } else if ([obj isKindOfClass:[NSString class]]) { [desc appendFormat:@"%@\t%@ = \"%@\",\n", tab, key, result]; } } else { @try { NSString *str = [[NSString alloc] initWithData:obj encoding:NSUTF8StringEncoding]; if (str != nil) { [desc appendFormat:@"%@\t%@ = \"%@\",\n", tab, key, str]; } else { [desc appendFormat:@"%@\t%@ = %@,\n", tab, key, obj]; } } @catch (NSException *exception) { [desc appendFormat:@"%@\t%@ = %@,\n", tab, key, obj]; } } } else { [desc appendFormat:@"%@\t%@ = %@,\n", tab, key, obj]; } } [desc appendFormat:@"%@}", tab]; return desc; } @end #endif
以上程式碼實現了NSSet/NSDictionry/NSArray型別的展示。