NSLog com dados CGPoint

93

Eu tenho um CGPoint chamado ponto que está recebendo um toque:

UITouch *touch = [touches anyObject];

CGPoint point = [touch locationInView:self];

Quero obter o valor da coordenada x em meu log do console:

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

Quando eu uso isso, a saída de registro para isso é:

x: (nulo)

Eu verifiquei que o ponto não é nulo quando isso é chamado usando o depurador e o relógio variável.

Qualquer ajuda apreciada,

Obrigado // :)

Spanky
fonte

Respostas:

259

Na verdade, a maneira mais fácil de registrar um CGPointé:

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

O equivalente ao Cocoa para desktop é NSStringFromPoint().

Jens Ayton
fonte
Isso é ainda melhor. A primeira resposta é a maneira mais fácil e leve. Mas isso me tira xey do CGPoint em um conjunto. Legal :) Ótima ferramenta :)
Spanky,
Como o StackOverflow achou por bem reintroduzir essa questão em meu feed RSS, posso também simplificar minha solução geral: jens.ayton.se/blag/almost-elegant-cave-man-debugging que permite que você vá JA_DUMP(point);e obtenha “point = { 43, 96} ”registrados sem se preocupar com os códigos de formato.
Jens Ayton
Como uso sua lib, uma vez que ela compila em I386, mas não em ARM? Quer dizer, como posso trabalhar em projetos iOS usando isso?
Dan Rosenstark
Primeiro, você precisa construir o arquivo FindAlignment.c como um aplicativo iOS e executá-lo em um dispositivo (não em um simulador). Em seguida, copie o resultado em um novo bloco #elif antes do #else na linha 172 em JAValueToString.m. Se isso não funcionar, uma depuração adicional será necessária. Não posso fazer isso porque não estou no programa iOS.
Jens Ayton
3
Também vale a pena notar que NSStringFromCGRect () também existe.
djskinner
24

point.x é um número de ponto flutuante, então você deve usar:

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

A maneira mais simples de registrar um CGPointvalor é usar a NSValueclasse, pois ela fornecerá todos os valores relevantes formatados de maneira adequada para o console. É feito assim:

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

Você também pode usar os métodos +valueWithCGRecte quando estiver tentando registrar, digamos, as propriedades ( ) ou ( ) de a .+valueWithCGSizeNSValueframeCGRectsizeCGSizeUIView

Nathan de Vries
fonte
1

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

Nicki
fonte
0

point.x é um número de ponto flutuante, então você deve codificar assim:

NSLog(@"%@",[NSString StringWithFormat:@"%f",point.x]);
Uma corrida
fonte
Se vc quiser String valor significa que vc use isso !!
4
Você está fazendo uma string de formato desnecessária dentro de uma string de formato. As abordagens de Philippe e Ahruman são muito mais simples e alcançam exatamente os mesmos resultados.
Brad Larson
0

usar :

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

Você também pode usar NSString para as seguintes informações:

NSStringFromCGPoint
NSStringFromCGSize
NSStringFromCGRect
NSStringFromCGAffineTransform
NSStringFromUIEdgeInsets

Aks
fonte