web-dev-qa-db-ja.com

NSLog C構造体(CGRectやCGPointなど)は可能ですか?

C構造体を構成するすべてのプロパティを明示的に入力することなく、C構造体をデバッグできるようにしたいと考えています。

つまり、私はこのようなことをしたいです:

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

明らかに '%@'は機能しないので、質問です。

407
mazniak

これを試すことができます:

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

さまざまなCG構造体をNSStringsに変換する多くの関数 IKitが提供 があります。動作しない理由は、%@がオブジェクトを意味するためです。 CGPointはC構造体です(CGRectsおよびCGSizesも同様です)。

797
Alex

次のような関数がいくつかあります。

NSStringFromCGPoint  
NSStringFromCGSize  
NSStringFromCGRect  
NSStringFromCGAffineTransform  
NSStringFromUIEdgeInsets

例:

NSLog(@"rect1: %@", NSStringFromCGRect(rect1));
229
steve
NSLog(@"%@", CGRectCreateDictionaryRepresentation(rect));
16
Abhishek Bedi

次のマクロを使用して、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)
13
e.James

これにはNSValueを使用できます。 NSValueオブジェクトは、単一のCまたはObjective-Cデータ項目の単純なコンテナです。 int、float、charなどのスカラー型のほか、ポインター、構造体、オブジェクトIDを保持できます。

例:

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

出力:NSPoint: {10, 30}

お役に立てば幸いです。

9
Nishant Tyagi

Stack Overflowの壊れたRSSがこの質問を復活させたので、ほぼ一般的なソリューションをここに示します。 JAValueToString

これにより、JA_DUMP(cgPoint)を記述し、cgPoint = {0, 0}をログに記録できます。

5
Jens Ayton

はい、以下のようないくつかの関数を使用できます:まず、CGPoint構造体を文字列に変換する必要があります。例を参照してください

1) NSStringFromCGPoint,  
2) NSStringFromCGSize,  
3) NSStringFromCGRect,  
4) NSStringFromCGAffineTransform,  
5) NSStringFromUIEdgeInsets,

例えば:

1) NSLog(@"NSStringFromCGPoint = %@", NSStringFromCGRect(cgPointValue));

このような...

5
NSLog(@"%@",CGRectCreateDictionaryRepresentation(rect));
3
Uday.M