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

Respostas:


259

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

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

O equivalente ao Cocoa para desktop é NSStringFromPoint().


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

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


1

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


0

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

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

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.