Je veux pouvoir déboguer les structures C sans avoir à taper explicitement toutes les propriétés qui les composent.
je veux être capable de faire quelque chose comme ceci:
CGPoint cgPoint = CGPointMake(0,0);
NSLog(@"%@",cgPoint);
Évidemment, le '% @' ne fonctionnera pas, d'où la question.
Vous pouvez essayer ceci:
NSLog(@"%@", NSStringFromCGPoint(cgPoint));
Il existe un certain nombre de fonctions fournies par UIKit qui convertissent les différentes structures CG en NSString
s. Cela ne fonctionne pas parce que %@
signifie un objet. Une CGPoint
est une structure C (tout comme CGRect
s et CGSize
s).
Il y a quelques fonctions comme:
NSStringFromCGPoint
NSStringFromCGSize
NSStringFromCGRect
NSStringFromCGAffineTransform
NSStringFromUIEdgeInsets
Un exemple:
NSLog(@"rect1: %@", NSStringFromCGRect(rect1));
NSLog(@"%@", CGRectCreateDictionaryRepresentation(rect));
J'utilise la macro suivante pour m'aider avec 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 pouvez 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);
Produirait ce qui suit:
cgPoint: (100, 200)
Vous pouvez utiliser NSValue
pour cela. Un objet NSValue est un simple conteneur pour un élément de données C ou Objective-C. Il peut contenir n'importe quel type de scalaire tel que int, float et char, ainsi que des pointeurs, des structures et des identifiants d'objet.
Exemple:
CGPoint cgPoint = CGPointMake(10,30);
NSLog(@"%@",[NSValue valueWithCGPoint:cgPoint]);
OUTPUT:NSPoint: {10, 30}
J'espère que ça vous aide.
Depuis que RSS brisé par Stack Overflow vient de me faire revivre cette question, voici ma solution quasi générale: JAValueToString
Cela vous permet d'écrire JA_DUMP(cgPoint)
et d'obtenir cgPoint = {0, 0}
enregistré.
Oui, vous pouvez utiliser ci-dessous quelques fonctions telles que: Vous devez d’abord convertir la structure CGPoint en chaîne, voir exemple.
1) NSStringFromCGPoint,
2) NSStringFromCGSize,
3) NSStringFromCGRect,
4) NSStringFromCGAffineTransform,
5) NSStringFromUIEdgeInsets,
Par exemple:
1) NSLog(@"NSStringFromCGPoint = %@", NSStringFromCGRect(cgPointValue));
Comme ça...
NSLog(@"%@",CGRectCreateDictionaryRepresentation(rect));