Xcode 8不显示整个NSLog输出

今天升级到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); 

如果您不想每次使用#define将代码redirect到printf(来自@xfdai的代码),则不需要编写printf代码:

 #define NSLog(FORMAT, ...) printf("%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]); 

希望这只是一个苹果的错误,将很快得到解决,直到那时我们才能使用它。

你可以使用这个方法。 每800个字符拆分。 或者可以设置。 NSLOG我认为截断每1000个字符。 如果string小于800,将使用简单的NSLog 。 这对于Json长string和使用控制台很有用。 printf使用Xcodedebugging窗口而不是控制台。

 -(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); } }