¿Es posible que NSLog C Structs(como CGRect o CGPoint)?
objective-c cocoa (8)
Desde que el RSS roto de Stack Overflow simplemente resucitó esta pregunta para mí, aquí está mi solución casi general: JAValueToString
Esto le permite escribir JA_DUMP(cgPoint)
y obtener cgPoint = {0, 0}
registrado.
Quiero poder depurar las estructuras de C sin tener que escribir explícitamente cada propiedad en la que constan
Es decir, quiero poder hacer algo como esto:
CGPoint cgPoint = CGPointMake(0,0);
NSLog(@"%@",cgPoint);
Obviamente, el ''% @'' no funcionará, de ahí la pregunta.
Hay algunas funciones como:
NSStringFromCGPoint
NSStringFromCGSize
NSStringFromCGRect
NSStringFromCGAffineTransform
NSStringFromUIEdgeInsets
Un ejemplo:
NSLog(@"rect1: %@", NSStringFromCGRect(rect1));
Puedes probar esto:
NSLog(@"%@", NSStringFromCGPoint(cgPoint));
UIKit proporciona una serie de funciones que convierten las distintas estructuras CG en NSString
s. La razón por la que no funciona es porque %@
significa un objeto. Un CGPoint
es un C struct (y también lo son CGRect
s y CGSize
s).
Puedes usar NSValue
para esto. Un objeto NSValue es un contenedor simple para un solo elemento de datos C o Objective-C. Puede contener cualquiera de los tipos escalares, como int, float y char, así como punteros, estructuras e identificadores de objetos.
Ejemplo:
CGPoint cgPoint = CGPointMake(10,30);
NSLog(@"%@",[NSValue valueWithCGPoint:cgPoint]);
SALIDA: NSPoint: {10, 30}
Espero que te ayude.
Sí, puede usar algunas funciones como las siguientes: 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));
Me gusta esto...
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)
NSLog(@"%@", CGRectCreateDictionaryRepresentation(rect));
NSLog(@"%@",CGRectCreateDictionaryRepresentation(rect));