NSLog con datos CGPoint

93

Tengo un CGPoint llamado punto al que se le está asignando un toque:

UITouch *touch = [touches anyObject];

CGPoint point = [touch locationInView:self];

Quiero obtener el valor de la coordenada x en el registro de mi consola:

NSLog(@"x: %s", point.x);

Cuando uso esto, la salida de registro para esto es:

x: (nulo)

He verificado que el punto no es nulo cuando se llama usando el depurador y el reloj variable.

Cualquier ayuda apreciada,

Gracias // :)

Spanky
fuente

Respuestas:

259

En realidad, la forma más sencilla de registrar un CGPointes:

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

El equivalente Cocoa de escritorio es NSStringFromPoint().

Jens Ayton
fuente
Esto es incluso mejor. La primera respuesta es la forma más fácil y liviana. Pero esto me da tanto x como y del CGPoint en un conjunto. Agradable :) Gran herramienta :)
Spanky
Dado que StackOverflow consideró oportuno volver a introducir esta pregunta en mi fuente RSS, también puedo engañar a mi solución general: jens.ayton.se/blag/almost-elegant-cave-man-debugging que te permite ir JA_DUMP(point);y obtener "point = { 43, 96} ”registrado sin tener que preocuparse por los códigos de formato.
Jens Ayton
¿Cómo uso su lib ya que se compila en I386 pero no en ARM? Quiero decir, ¿cómo puedo trabajar en proyectos de iOS usándolo?
Dan Rosenstark
Primero, necesitaría compilar el archivo FindAlignment.c como una aplicación de iOS y ejecutarlo en un dispositivo (no en un simulador). Luego, copie el resultado en un nuevo bloque #elif antes del #else en la línea 172 en JAValueToString.m. Si esto no funciona, se requerirá una depuración adicional. No puedo hacerlo porque no estoy en el programa de iOS.
Jens Ayton
3
También vale la pena señalar que NSStringFromCGRect () también existe.
djskinner
24

point.x es un número de punto flotante, por lo que debe usar:

NSLog(@"x: %f", point.x);
Philippe Leybaert
fuente
9

La forma más sencilla de registrar un CGPointvalor es usar la NSValueclase, ya que le dará todos los valores relevantes formateados correctamente para la consola. Se hace así:

NSLog(@"myPoint = %@", [NSValue valueWithCGPoint:myPoint]);

También puede utilizar los métodos +valueWithCGRecty cuando intenta registrar, digamos, las propiedades ( ) o ( ) de un .+valueWithCGSizeNSValueframeCGRectsizeCGSizeUIView

Nathan de Vries
fuente
1

NSLog(@"point x,y: %f,%f", point.x, point.y);

Nicki
fuente
0

point.x es un número de punto flotante, por lo que debería codificar así:

NSLog(@"%@",[NSString StringWithFormat:@"%f",point.x]);
Arun
fuente
Si quieres un valor de cadena significa que solo debes usar esto.
4
Está haciendo una cadena de formato innecesaria dentro de una cadena de formato. Los enfoques de Philippe y Ahruman son mucho más simples y logran exactamente los mismos resultados.
Brad Larson
0

utilizar :

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

También puede utilizar NSString para obtener la siguiente información:

NSStringFromCGPoint
NSStringFromCGSize
NSStringFromCGRect
NSStringFromCGAffineTransform
NSStringFromUIEdgeInsets

Aks
fuente