Xcode 8不显示完整的NSLog输出

19

今天升级到Xcode 8 GM后,我注意到NSLog在控制台上没有打印完整的日志信息。当使用下载大量信息的API(例如REST API从数据库下载所有产品)时,尤其明显,它只显示第一个产品的前30个键,其余信息被截断了...

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

NSDictionary *allProducts = responseFromAPI;
NSLog(@"All products:%@", allProducts);

有其他人也注意到这个问题了吗? 有人知道如何修复吗?


我也遇到了同样的问题,但是我无法解决它!我没有打印字典,这是我的代码 - 以前可以打印整个字符串,现在每次只打印1028个字符: NSLog(@"Data:%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); - lomokat
这个问题是在升级到xCode 8后也出现的吗? - Pointblaster
是的,只有在 Xcode 8 GM 之后才开始出现这个问题。我在上一个 beta 版本中没有注意到它。 - lomokat
@lomokat和Pointblaster,这可能会对你有所帮助https://dev59.com/wJrga4cB1Zd3GeqPstNT#39538500。 - Ketan Parmar
就像其他问题所提供的那样,您可以使用printf来伪造NSLog,但这在Swift中并没有太大帮助(好吧,一个人可以编写大量代码来桥接Swift和Obj-C...但我宁愿选择不同的解决方案)。 - AutomatonTec
显示剩余2条评论
2个回答

13

正如@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]);
希望这个是只是漏洞来自<苹果公司>那将会<被修正<尽快

,在那之前我们可以使用这个。

0
你可以使用这个方法。每800个字符分割一次。或者可以设置。我认为每1000个字符截断一次,使用NSLOG。如果字符串少于800,则使用简单的NSLog。这对于Json长字符串并使用控制台非常有用。printf使用Xcode调试窗口而不是控制台。
-(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);
        }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接