提问



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


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


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


显然,%@不会起作用,因此问题就在于此。

最佳参考


你可以试试这个:


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


UIKit提供了许多功能,可以将各种CG结构转换为NSString。它不起作用的原因是因为%@表示一个对象。CGPoint是一个C结构(CGRect s和CGSize s也是如此。[23]

其它参考1


有一些功能,如:


NSStringFromCGPoint  
NSStringFromCGSize  
NSStringFromCGRect  
NSStringFromCGAffineTransform  
NSStringFromUIEdgeInsets


一个例子:


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

其它参考2


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

其它参考3


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


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


示例:


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


输出: NSPoint: {10, 30}


希望它能帮到你。

其它参考5


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


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

其它参考6


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


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


例如:


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


喜欢这个...

其它参考7


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