我希望能够调试C结构,而不必显式地键入它们所包含的每个属性。
例如,我希望能够做这样的事情:
CGPoint cgPoint = CGPointMake(0,0);
NSLog(@"%@",cgPoint);
显然'%@'不起作用,因此出现了这个问题。
我希望能够调试C结构,而不必显式地键入它们所包含的每个属性。
例如,我希望能够做这样的事情:
CGPoint cgPoint = CGPointMake(0,0);
NSLog(@"%@",cgPoint);
显然'%@'不起作用,因此出现了这个问题。
当前回答
我使用下面的宏来帮助我用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)
其他回答
NSLog(@"%@",CGRectCreateDictionaryRepresentation(rect));
你可以为此使用NSValue。NSValue对象是单个C或Objective-C数据项的简单容器。它可以保存任何标量类型,如int、float和char,以及指针、结构和对象id。
例子:
CGPoint cgPoint = CGPointMake(10,30);
NSLog(@"%@",[NSValue valueWithCGPoint:cgPoint]);
输出:NSPoint: {10,30}
希望对你有所帮助。
NSLog(@"%@", CGRectCreateDictionaryRepresentation(rect));
由于Stack Overflow的坏RSS刚刚为我复活了这个问题,这里是我的几乎通用的解决方案:JAValueToString
这允许您编写JA_DUMP(cgPoint)并记录cgPoint ={0,0}的日志。
有几个函数,比如:
NSStringFromCGPoint
NSStringFromCGSize
NSStringFromCGRect
NSStringFromCGAffineTransform
NSStringFromUIEdgeInsets
一个例子:
NSLog(@"rect1: %@", NSStringFromCGRect(rect1));