2011-03-10 63 views
1

为什么这个Objective-C代码打印0的的值,其中在调试器中,我可以看到他们有非0值:为什么NSLog代码的值为零?

代码

CGRect currFrame = label.frame;     
currFrame.origin.y = currVertPos; 
currFrame.origin.x = 0; 
currFrame.size.height = expectedLabelSize.height; 
currFrame.size.width = maxWidt h; 
NSLog(@" currFrame dimensions:x/y/height/width = %d/%d/%d/%d", 0, currVertPos, expectedLabelSize.height, maxWidth); 

什么是印刷

currFrame dimensions:x/y/height/width = 0/0/0/0 
+1

下面的答案是正确的,但除此之外,你应该看看该方法NSStringFromRect(),以帮助的CGRect的 – keno 2011-03-10 00:57:03

回答

2

因为您使用的是%d因此将数字格式化为整数。尝试使用%f%lf代替:

NSLog(@" currFrame dimensions:x/y/height/width = %f/%f/%f/%f", 0, currVertPos, expectedLabelSize.height, maxWidth); 
+0

感谢便于打印 - 有没有格式化字符,你可以使用它会智能地找出如何根据类型对其进行最佳格式化?即使它更简单 – Greg 2011-03-10 00:58:47

+0

哦 - 我只是尝试使用%f,它不起作用 - 获得以下行作为输出“currFrame尺寸:x/y/height/width = 0.000000/0.000000/0.000000/0.000000” – Greg 2011-03-10 01:03:32

+0

有你认为这些值可能实际上是0?你确认他们不是? – 2011-03-10 01:18:29

6

所有这些值都有CGFloat类型,但您试图将它们打印为int s。只需将%d替换为%f即可。

P.S.偶尔苹果开发者必须打印CGRect,所以他们想出了一些方便的方法。尝试NSLog(@"currFrame dimensions: %@", NSStringFromCGRect(currFrame))