NSLog avec les données CGPoint


93

J'ai un point appelé CGPoint auquel une touche est attribuée:

UITouch *touch = [touches anyObject];

CGPoint point = [touch locationInView:self];

Je veux obtenir la valeur de coordonnée x dans mon journal de console:

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

Lorsque j'utilise ceci, la sortie du journal pour ceci est:

x: (nul)

J'ai vérifié que le point n'est pas nul lorsqu'il est appelé à l'aide du débogueur et de la surveillance variable.

Toute aide appréciée,

Merci // :)

Réponses:


259

En fait, le moyen le plus simple de consigner un a CGPointest:

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

L'équivalent de bureau Cocoa est NSStringFromPoint().


C'est encore mieux. La première réponse est le moyen le plus simple et le plus léger. Mais cela me permet d'obtenir à la fois x et y du CGPoint dans un seul ensemble. Nice :) Great tool :)
Spanky

Puisque StackOverflow a jugé bon de réintroduire cette question dans mon flux RSS, je pourrais aussi bien pimper ma solution générale: jens.ayton.se/blag/almost-elegant-cave-man-debugging qui vous permet d'aller JA_DUMP(point);chercher "point = { 43, 96} ”connecté sans avoir à se soucier des codes de format.
Jens Ayton

Comment utiliser votre bibliothèque puisqu'elle compile sur I386 mais pas sur ARM? Je veux dire, comment puis-je travailler sur des projets iOS en l'utilisant?
Dan Rosenstark

Tout d'abord, vous devez créer le fichier FindAlignment.c en tant qu'application iOS et l'exécuter sur un appareil (pas un simulateur). Ensuite, copiez le résultat dans un nouveau bloc #elif avant le #else à la ligne 172 dans JAValueToString.m. Si cela ne fonctionne pas, un débogage supplémentaire sera nécessaire. Je ne peux pas le faire car je ne suis pas dans le programme iOS.
Jens Ayton

3
Il convient également de noter que NSStringFromCGRect () existe également.
djskinner

24

point.x est un nombre à virgule flottante, vous devez donc utiliser:

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

9

Le moyen le plus simple de consigner une CGPointvaleur est d'utiliser la NSValueclasse, car elle vous donnera toutes les valeurs pertinentes bien formatées pour la console. C'est fait comme ça:

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

Vous pouvez également utiliser les méthodes +valueWithCGRectet lorsque vous essayez de consigner, par exemple, les propriétés ( ) ou ( ) d'un fichier .+valueWithCGSizeNSValueframeCGRectsizeCGSizeUIView


1

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


0

point.x est un nombre à virgule flottante, vous devez donc coder comme ceci:

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

Si vous voulez une valeur de chaîne, vous devez simplement l'utiliser!

4
Vous créez une chaîne de format inutile dans une chaîne de format. Les approches de Philippe et Ahruman sont beaucoup plus simples et aboutissent exactement aux mêmes résultats.
Brad Larson

0

utilisation :

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

Vous pouvez également utiliser NSString pour les informations suivantes:

NSStringFromCGPoint
NSStringFromCGSize
NSStringFromCGRect
NSStringFromCGAffineTransform
NSStringFromUIEdgeInsets

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.