NSLog C结构是否可能(如CGRect或CGPoint)?

时间:2009-02-15 02:28:30

标签: c objective-c cocoa cocoa-touch

我希望能够调试C结构,而无需显式键入它们所包含的每个属性。

即。我希望能够做到这样的事情:

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

显然'%@'不起作用,因此问题。

8 个答案:

答案 0 :(得分:797)

你可以试试这个:

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

有许多函数provided by UIKit可以将各种CG结构转换为NSString。它不起作用的原因是因为%@表示一个对象。 CGPoint是一个C结构(CGRectCGSize s也是如此。

答案 1 :(得分:229)

有一些功能,如:

NSStringFromCGPoint  
NSStringFromCGSize  
NSStringFromCGRect  
NSStringFromCGAffineTransform  
NSStringFromUIEdgeInsets

一个例子:

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

答案 2 :(得分:16)

NSLog(@"%@", CGRectCreateDictionaryRepresentation(rect));

答案 3 :(得分:13)

我使用以下宏来帮助我使用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)

答案 4 :(得分:9)

您可以使用NSValue NSValue 对象是单个C或Objective-C数据项的简单容器。它可以包含任何标量类型,如int,float和char,以及指针,结构和对象id。

示例:

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

输出: NSPoint: {10, 30}

希望它对你有所帮助。

答案 5 :(得分:5)

由于Stack Overflow的破解RSS刚刚为我重新提出了这个问题,这是我几乎一般的解决方案:JAValueToString

这使您可以编写JA_DUMP(cgPoint)并记录cgPoint = {0, 0}

答案 6 :(得分:5)

是的,您可以使用以下几个功能: 首先,您必须将CGPoint结构转换为字符串,请参阅示例

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

例如:

vector_centroids.push_back({vec_normal, vec_centroid}); //pair

喜欢这个......

答案 7 :(得分:3)

NSLog(@"%@",CGRectCreateDictionaryRepresentation(rect));