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.