objective ios objective-c xcode nslog

ios - objective - Xcode 8 no muestra la salida completa de NSLog



nslog objective c (2)

Después de actualizar a Xcode 8 GM hoy, noté que NSLog no está imprimiendo todo el mensaje de registro en la consola. Esto es especialmente notable cuando se trabaja contra una API que descarga mucha información, como una API REST que descarga todos los productos de una base de datos, solo muestra las primeras 30 claves en el primer producto, el resto de la información se recorta ...

Estoy imprimiendo arrays y diccionarios, si eso hace alguna diferencia.

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

¿Alguien más ha notado esto? ¿Y alguien sabe cómo arreglar esto?


Como @Lion describió en su comentario, la forma más sencilla posible es utilizar printf en su lugar. No funciona exactamente como NSLog pero muestra lo que quieres.

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

o más corto:

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

Un consejo es colocar un "/ n" al principio o al final del formato de printf para que separe las salidas y no ponga todas en una sola línea. Algo como esto:

printf("%s/n", string.UTF8String);

Si no te gusta escribir printf, cada vez puedes usar #define para redirigir el código a un printf como este (código de @xfdai):

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

Esperemos que esto sea solo un error de Apple que se solucione pronto, hasta que podamos usarlo.


Puedes usar este método. Dividir cada 800 caracteres. O se puede configurar. NSLOG Creo que NSLOG cada 1000 caracteres. Si la cadena es menor que 800 usará un NSLog simple. Esto es útil para las cadenas largas de Json y utiliza la consola. printf usa la ventana de depuración de Xcode, no la consola.

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