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

Spanky
la source

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().

Jens Ayton
la source
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);
Philippe Leybaert
la source
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

Nathan de Vries
la source
1

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

Nicki
la source
0

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

NSLog(@"%@",[NSString StringWithFormat:@"%f",point.x]);
Arun
la source
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

Aks
la source