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 // :)

Respuestas:


259

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

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

El equivalente Cocoa de escritorio es NSStringFromPoint().


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


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


1

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


0

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

NSLog(@"%@",[NSString StringWithFormat:@"%f",point.x]);

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.