我希望能够调试C结构,而无需显式键入它们所包含的每个属性。
即。我希望能够做到这样的事情:
CGPoint cgPoint = CGPointMake(0,0);
NSLog(@"%@",cgPoint);
显然'%@'不起作用,因此问题。
答案 0 :(得分:797)
你可以试试这个:
NSLog(@"%@", NSStringFromCGPoint(cgPoint));
有许多函数provided by UIKit可以将各种CG结构转换为NSString
。它不起作用的原因是因为%@
表示一个对象。 CGPoint
是一个C结构(CGRect
和CGSize
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));