Xcode 8 不显示整个 NSLog 输出
Xcode 8 Does not display the whole NSLog output
今天升级到 Xcode 8 GM 后,我注意到 NSLog 没有将整个日志消息打印到控制台。这在针对下载大量信息的 API 工作时尤其明显,例如 REST API 从数据库下载所有产品,它只显示第一个产品的前 30 个键,其余的的信息被删减...
我正在打印数组和字典,如果这有什么不同的话。
NSDictionary *allProducts = responseFromAPI;
NSLog(@"All products:%@", allProducts);
有没有其他人注意到这一点?有人知道如何解决这个问题吗?
正如@Lion 在他的评论中所述,最简单的方法是改用 printf。它不像 NSLog 那样工作,但它显示了你想要的。
NSDictionary *allProducts = responseFromAPI;
NSString * string = [NSString stringWithFormat: @"%@", allProducts];
printf("%s", [string UTF8String]);
或更短:
NSDictionary *allProducts = responseFromAPI;
printf("%s", [NSString stringWithFormat: @"%@", allProducts].UTF8String);
一个技巧是在 printf 格式的开头或结尾放置一个“\n”,这样它将分隔输出而不是将所有内容放在一行中。像这样:
printf("%s\n", string.UTF8String);
如果你不喜欢每次都写 printf,你可以使用 #define 将代码重定向到 printf,就像这样(代码来自@xfdai):
#define NSLog(FORMAT, ...) printf("%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
希望这只是 Apple 的一个错误,很快就会得到修复,在那之前我们可以使用它。
你可以使用这个方法。每 800 个字符拆分一次。或者可以设置。 NSLOG
我认为每 1000 个字符截断一次。如果字符串小于 800 将使用简单的 NSLog
。这对于 Json 长字符串很有用,并使用控制台。 printf
使用 Xcode 调试 window 而不是控制台。
-(void) JSLog:(NSString*)logString{
int stepLog = 800;
NSInteger strLen = [@([logString length]) integerValue];
NSInteger countInt = strLen / stepLog;
if (strLen > stepLog) {
for (int i=1; i <= countInt; i++) {
NSString *character = [logString substringWithRange:NSMakeRange((i*stepLog)-stepLog, stepLog)];
NSLog(@"%@", character);
}
NSString *character = [logString substringWithRange:NSMakeRange((countInt*stepLog), strLen-(countInt*stepLog))];
NSLog(@"%@", character);
} else {
NSLog(@"%@", logString);
}
}
今天升级到 Xcode 8 GM 后,我注意到 NSLog 没有将整个日志消息打印到控制台。这在针对下载大量信息的 API 工作时尤其明显,例如 REST API 从数据库下载所有产品,它只显示第一个产品的前 30 个键,其余的的信息被删减...
我正在打印数组和字典,如果这有什么不同的话。
NSDictionary *allProducts = responseFromAPI;
NSLog(@"All products:%@", allProducts);
有没有其他人注意到这一点?有人知道如何解决这个问题吗?
正如@Lion 在他的评论中所述,最简单的方法是改用 printf。它不像 NSLog 那样工作,但它显示了你想要的。
NSDictionary *allProducts = responseFromAPI;
NSString * string = [NSString stringWithFormat: @"%@", allProducts];
printf("%s", [string UTF8String]);
或更短:
NSDictionary *allProducts = responseFromAPI;
printf("%s", [NSString stringWithFormat: @"%@", allProducts].UTF8String);
一个技巧是在 printf 格式的开头或结尾放置一个“\n”,这样它将分隔输出而不是将所有内容放在一行中。像这样:
printf("%s\n", string.UTF8String);
如果你不喜欢每次都写 printf,你可以使用 #define 将代码重定向到 printf,就像这样(代码来自@xfdai):
#define NSLog(FORMAT, ...) printf("%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
希望这只是 Apple 的一个错误,很快就会得到修复,在那之前我们可以使用它。
你可以使用这个方法。每 800 个字符拆分一次。或者可以设置。 NSLOG
我认为每 1000 个字符截断一次。如果字符串小于 800 将使用简单的 NSLog
。这对于 Json 长字符串很有用,并使用控制台。 printf
使用 Xcode 调试 window 而不是控制台。
-(void) JSLog:(NSString*)logString{
int stepLog = 800;
NSInteger strLen = [@([logString length]) integerValue];
NSInteger countInt = strLen / stepLog;
if (strLen > stepLog) {
for (int i=1; i <= countInt; i++) {
NSString *character = [logString substringWithRange:NSMakeRange((i*stepLog)-stepLog, stepLog)];
NSLog(@"%@", character);
}
NSString *character = [logString substringWithRange:NSMakeRange((countInt*stepLog), strLen-(countInt*stepLog))];
NSLog(@"%@", character);
} else {
NSLog(@"%@", logString);
}
}