415 votes

Est-Il Possible de NSLog C les Structures (Comme CGRect ou CGPoint)?

Je veux être en mesure de déboguer les structures C sans avoir à taper tous les biens qu'ils consistent.

c'est à dire je veux être en mesure de faire quelque chose comme ceci:

CGPoint cgPoint = CGPointMake(0,0);
NSLog(@"%@",cgPoint);

Évidemment, le '%@' ne fonctionne pas, d'où la question.

806voto

Alex Points 19842

Vous pouvez essayer ceci:

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

Il y a un certain nombre de fonctions fournies par UIKit que de convertir les divers CG structures en NSStrings. La raison pour laquelle cela ne fonctionne pas est parce qu' %@ signifie un objet. Un CGPoint est une structure C (et sont donc CGRects et CGSizes).

235voto

steve Points 1331

Il y a quelques fonctions comme:

NSStringFromCGPoint  
NSStringFromCGSize  
NSStringFromCGRect  
NSStringFromCGAffineTransform  
NSStringFromUIEdgeInsets

Un exemple:

NSLog(@"rect1: %@", NSStringFromCGRect(rect1));

18voto

Abhishek Bedi Points 967
NSLog(@"%@", CGRectCreateDictionaryRepresentation(rect));

13voto

e.James Points 51680

J'ai utiliser la macro suivante pour m'aider à sortir de NSRect:

#define LogRect(RECT) NSLog(@"%s: (%0.0f, %0.0f) %0.0f x %0.0f",
    #RECT, RECT.origin.x, RECT.origin.y, RECT.size.width, RECT.size.height)

Vous pourriez faire quelque chose de similaire pour CGPoint:

@define LogCGPoint(POINT) NSLog(@"%s: (%0.0f, %0.0f)",
    #POINT POINT.x, POINT.y);

En l'utilisant comme suit:

LogCGPoint(cgPoint);

Serait de produire les éléments suivants:

cgPoint: (100, 200)

10voto

Nishant Tyagi Points 5705

Vous pouvez utiliser NSValue pour cette. Un NSValue objet est un conteneur simple pour un seul C ou Objective-C de l'élément de données. Il peut contenir tous les types scalaires tels que int, float, char et, ainsi que les pointeurs, les structures et les id d'objet.

Exemple:

  CGPoint cgPoint = CGPointMake(10,30);
    NSLog(@"%@",[NSValue valueWithCGPoint:cgPoint]);

SORTIE : NSPoint: {10, 30}

Espérons qu'il vous aide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X