Xcode 8不显示整个NSLog输出

Poi*_*ter 18 xcode objective-c nslog ios

升级到Xcode 8 GM后,我注意到NSLog没有将整个日志消息打印到控制台.当针对下载大量信息的API工作时尤其明显,例如REST API从数据库下载所有产品,它只显示第一个产品的前30个键,其余信息被剪切...

我打印数组和字典,如果这有任何区别.

NSDictionary *allProducts = responseFromAPI;
NSLog(@"All products:%@", allProducts);
Run Code Online (Sandbox Code Playgroud)

有没有人注意到这个?有人知道如何解决这个问题吗?

Poi*_*ter 11

正如@Lion在评论中所描述的那样,最简单的方法是使用printf代替.它不像NSLog那样工作,但它显示了你想要的东西.

NSDictionary *allProducts = responseFromAPI;
NSString * string = [NSString stringWithFormat: @"%@", allProducts];
printf("%s", [string UTF8String]);
Run Code Online (Sandbox Code Playgroud)

或更短:

NSDictionary *allProducts = responseFromAPI;
printf("%s", [NSString stringWithFormat: @"%@", allProducts].UTF8String);
Run Code Online (Sandbox Code Playgroud)

提示是在printf格式的开头或结尾放置一个"\n",这样它就会将输出分开而不是全部放在一行中.像这样的东西:

printf("%s\n", string.UTF8String);
Run Code Online (Sandbox Code Playgroud)

如果你不喜欢每次都使用#define将代码重定向到这样的printf(来自@xfdai的代码),那么你不喜欢编写printf:

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

希望这只是Apple的一个错误,很快就会修复,直到那时我们才能使用它.