C構造体を構成するすべてのプロパティを明示的に入力することなく、C構造体をデバッグできるようにしたいと考えています。
つまり、私はこのようなことをしたいです:
CGPoint cgPoint = CGPointMake(0,0);
NSLog(@"%@",cgPoint);
明らかに '%@'は機能しないので、質問です。
これを試すことができます:
NSLog(@"%@", NSStringFromCGPoint(cgPoint));
さまざまなCG構造体をNSString
sに変換する多くの関数 IKitが提供 があります。動作しない理由は、%@
がオブジェクトを意味するためです。 CGPoint
はC構造体です(CGRect
sおよびCGSize
sも同様です)。
次のような関数がいくつかあります。
NSStringFromCGPoint
NSStringFromCGSize
NSStringFromCGRect
NSStringFromCGAffineTransform
NSStringFromUIEdgeInsets
例:
NSLog(@"rect1: %@", NSStringFromCGRect(rect1));
NSLog(@"%@", CGRectCreateDictionaryRepresentation(rect));
次のマクロを使用して、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)
CGPointでも同様のことができます。
@define LogCGPoint(POINT) NSLog(@"%s: (%0.0f, %0.0f)",
#POINT POINT.x, POINT.y);
次のように使用します。
LogCGPoint(cgPoint);
以下を生成します:
cgPoint: (100, 200)
これにはNSValue
を使用できます。 NSValueオブジェクトは、単一のCまたはObjective-Cデータ項目の単純なコンテナです。 int、float、charなどのスカラー型のほか、ポインター、構造体、オブジェクトIDを保持できます。
例:
CGPoint cgPoint = CGPointMake(10,30);
NSLog(@"%@",[NSValue valueWithCGPoint:cgPoint]);
出力:NSPoint: {10, 30}
お役に立てば幸いです。
Stack Overflowの壊れたRSSがこの質問を復活させたので、ほぼ一般的なソリューションをここに示します。 JAValueToString
これにより、JA_DUMP(cgPoint)
を記述し、cgPoint = {0, 0}
をログに記録できます。
はい、以下のようないくつかの関数を使用できます:まず、CGPoint構造体を文字列に変換する必要があります。例を参照してください
1) NSStringFromCGPoint,
2) NSStringFromCGSize,
3) NSStringFromCGRect,
4) NSStringFromCGAffineTransform,
5) NSStringFromUIEdgeInsets,
例えば:
1) NSLog(@"NSStringFromCGPoint = %@", NSStringFromCGRect(cgPointValue));
このような...
NSLog(@"%@",CGRectCreateDictionaryRepresentation(rect));