¿Es posible NSLog C Structs (como CGRect o CGPoint)?

2 minutos de lectura

Quiero poder depurar estructuras C sin tener que escribir explícitamente cada propiedad en la que consisten.

es decir, quiero poder hacer algo como esto:

CGPoint cgPoint = CGPointMake(0,0);
NSLog(@"%@",cgPoint);

Obviamente, el ‘%@’ no funcionará, de ahí la pregunta.

  • NSLog(@”%@”, CGRectCreateDictionaryRepresentation(rect));

    – Abhishek Bedi

    20 de noviembre de 2012 a las 10:16

  • Pruebe LOG_EXPR de la biblioteca VTPG_Common: vgable.com/blog/tag/log_expr

    – AprendeCocos2D

    16 de septiembre de 2013 a las 13:42

avatar de usuario
Alex

Puedes probar esto:

NSLog(@"%@", NSStringFromCGPoint(cgPoint));

Hay una serie de funciones proporcionado por UIKit que convierten las diversas estructuras CG en NSStrings. La razón por la que no funciona es porque %@ significa un objeto. A CGPoint es una estructura C (y también lo son CGRectarena CGSizes).

  • Con AppKit en OS X necesitaría convertir a un NSPoint y luego llamar NSStringFromPoint. Por ejemplo: NSStringFromPoint(NSPointFromCGPoint(point))

    – Alex

    22 de agosto de 2012 a las 17:56

  • NSLog(@”%@”, CGRectCreateDictionaryRepresentation(rect));

    – Abhishek Bedi

    20 de noviembre de 2012 a las 10:16

  • Similar a los prefijos UI, MK, CL que, si bien todos tienen significados, necesitan importar un archivo .h respectivo como: UIKit, MapKit, CoreLocation; ¿El prefijo CG significa que debo importar algo? Si no, ¿es solo una convención de nomenclatura?

    – mfaani

    16/03/2016 a las 20:42

avatar de usuario
steve

Hay algunas funciones como:

NSStringFromCGPoint  
NSStringFromCGSize  
NSStringFromCGRect  
NSStringFromCGAffineTransform  
NSStringFromUIEdgeInsets

Un ejemplo:

NSLog(@"rect1: %@", NSStringFromCGRect(rect1));

  • Estos son: “lo único en todo el desarrollo de iOS que es más útil pero menos conocido” !! je

    – Gordito

    21 de febrero de 2014 a las 15:12

  • Nota: para el desarrollo de Cocoa (OS X), estas funciones no tienen “CG” en el nombre.

    – peterflynn

    22 de julio de 2015 a las 22:41

NSLog(@"%@", CGRectCreateDictionaryRepresentation(rect));

Uso la siguiente macro para ayudarme con NSRect:

#define LogRect(RECT) NSLog(@"%s: (%0.0f, %0.0f) %0.0f x %0.0f",
    #RECT, RECT.origin.x, RECT.origin.y, RECT.size.width, RECT.size.height)

Podrías hacer algo similar para CGPoint:

@define LogCGPoint(POINT) NSLog(@"%s: (%0.0f, %0.0f)",
    #POINT POINT.x, POINT.y);

Usándolo de la siguiente manera:

LogCGPoint(cgPoint);

Produciría lo siguiente:

cgPoint: (100, 200)

Puedes usar NSValue para esto. Un NSValor object es un contenedor simple para un solo elemento de datos C u Objective-C. Puede contener cualquiera de los tipos escalares, como int, float y char, así como punteros, estructuras e ID de objetos.

Ejemplo:

  CGPoint cgPoint = CGPointMake(10,30);
    NSLog(@"%@",[NSValue valueWithCGPoint:cgPoint]);

PRODUCCIÓN : NSPoint: {10, 30}

Espero que te ayude.

avatar de usuario
NANNAV

Dado que el RSS roto de Stack Overflow acaba de resucitar esta pregunta para mí, esta es mi solución casi general: JAValueToString

Esto te permite escribir JA_DUMP(cgPoint) y obten cgPoint = {0, 0} registrado.

avatar de usuario
Hussain Shabbir

Sí, puede usar algunas funciones a continuación como: Primero debe convertir la estructura CGPoint en una cadena, vea el ejemplo

1) NSStringFromCGPoint,  
2) NSStringFromCGSize,  
3) NSStringFromCGRect,  
4) NSStringFromCGAffineTransform,  
5) NSStringFromUIEdgeInsets,

Por ejemplo:

1) NSLog(@"NSStringFromCGPoint = %@", NSStringFromCGRect(cgPointValue));

Como esto…

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad