c objective-c cocoa cocoa-touch

¿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));