使用CGPoint数据的NSLog

93

我有一个名为point的CGPoint变量,它被赋值为触摸事件:

UITouch *touch = [touches anyObject];

CGPoint point = [touch locationInView:self];

我想要将x坐标值输出到控制台日志:

NSLog(@"x: %s", point.x);

当我使用这个时,它的日志输出为:

x: (null)

我已经使用调试器和变量监视验证了调用时point不为null。

感谢任何帮助,

谢谢 // :)

7个回答

261

实际上,记录 CGPoint 最简单的方法是:

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

桌面 Cocoa 版本的等效方法是 NSStringFromPoint()


这甚至更好。第一个答案是最简单和最轻量级的方法。但这让我一次性从CGPoint中获取了x和y。不错 :) 很棒的工具 :) - Spanky
由于StackOverflow决定在我的RSS订阅中重新引入这个问题,我可能会推销我的通用解决方案:http://jens.ayton.se/blag/almost-elegant-cave-man-debugging/,它允许您输入`JA_DUMP(point);`并记录“point = {43, 96}”而无需担心格式代码。 - Jens Ayton
我该如何使用你的库呢?因为它可以在I386上编译,但不能在ARM上编译。我的意思是,我如何在iOS项目中使用它? - Dan Rosenstark
首先,您需要将FindAlignment.c文件构建为iOS应用程序,并在设备上运行它(而不是模拟器)。然后,在JAValueToString.m的第172行的#else之前将结果复制到新的#elif块中。如果这样做不起作用,则需要进行额外的调试。我无法做到这一点,因为我不在iOS计划中。 - Jens Ayton
3
值得注意的是,NSStringFromCGRect() 也是存在的。 - djskinner
你可以使用这个辅助函数来保持代码的整洁 #define CGLog(a) NSLog(@"%@", NSStringFromCGPoint(a)) - johndpope

24

point.x是一个浮点数,所以你应该使用:

NSLog(@"x: %f", point.x);

9

记录CGPoint值的最简单方法是使用NSValue类,因为它会为您提供所有相关的值,并以控制台友好的格式呈现。步骤如下:

NSLog(@"myPoint = %@", [NSValue valueWithCGPoint:myPoint]);

当你想要记录一个UIViewframe(CGRect)或者size(CGSize)属性时,你还可以使用NSValue+valueWithCGRect+valueWithCGSize方法。


2

NSLog(@"点的坐标为:%f,%f", point.x, point.y);


0

point.x 是一个浮点数,因此你应该这样编码:

NSLog(@"%@",[NSString StringWithFormat:@"%f",point.x]);

如果你想要一个字符串值,只需要使用这个! - Suresh
4
你在一个格式化字符串中进行了不必要的格式化操作。Philippe和Ahruman的方法更简单,且能够获得完全相同的结果。 - Brad Larson

0

使用:

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

你也可以使用NSString来获取以下信息:

NSStringFromCGPoint
NSStringFromCGSize
NSStringFromCGRect
NSStringFromCGAffineTransform
NSStringFromUIEdgeInsets


0

最新语法:

NSLog("%@", NSCoder.string(for: point!))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接