Ios NSLog的奇怪行为
我正在使用NSLog检查UITextView。我的代码中有以下日志记录语句:Ios NSLog的奇怪行为,ios,objective-c,cocoa-touch,uitextview,nslog,Ios,Objective C,Cocoa Touch,Uitextview,Nslog,我正在使用NSLog检查UITextView。我的代码中有以下日志记录语句: NSLog(@"textView: %@",textView); NSLog(@"textView.frame: %@",textView.frame); NSLog(@"[textView frame]: %@",[textView frame]); 在控制台的输出中,我得到以下信息: 2010-11-29 22:00:38.252 MenuMaker[57602:207] textView
NSLog(@"textView: %@",textView);
NSLog(@"textView.frame: %@",textView.frame);
NSLog(@"[textView frame]: %@",[textView frame]);
在控制台的输出中,我得到以下信息:
2010-11-29 22:00:38.252 MenuMaker[57602:207] textView: <UITextView: 0x3b3afe0; frame = (0 0; 320 387); text = 'blah...'; clipsToBounds = YES; autoresize = RM+BM; layer = <CALayer: 0x3b3afa0>>
2010-11-29 22:00:38.254 MenuMaker[57602:207] textView.frame: (null)
2010-11-29 22:00:38.254 MenuMaker[57602:207] [textView frame]: (null)
2010-11-29 22:00:38.252菜单制造商[57602:207]文本视图:
2010-11-29 22:00:38.254 MenuMaker[57602:207]textView.frame:(空)
2010-11-29 22:00:38.254菜单生成器[57602:207][textView帧]:(空)
第一行输出,因为它包含“frame=(0;320 387)”位,使我相信UITextView的frame变量已经设置好了。但是为什么接下来的两行在这种情况下显示null?他们不应该转储帧的值吗
提前感谢
UIView.frame
只是一个结构(它依次包含一个和一个结构)。
因此不涉及任何类,并且因为只有类可以有字符串表示,所以会显示null
。如果需要帧的值,必须执行以下操作:
NSLog(@"textView.frame origin: %f %f", textView.frame.origin.x, textView.frame..origin.y);
NSLog(@"textView.frame size: %f %f", textView.frame.size.width, textView.frame.size.height);
文本视图。帧将返回一个CGRect值。因此,如果您想知道textView的帧值
NSLog(@"textView frame height: %f",textView.frame.size.height);
NSLog(@"textView frame width: %f",textView.frame.size.width);
NSLog(@"textView frame x Position: %f",textView.frame.origin.x);
NSLog(@"textView frame y Position: %f",textView.frame.origin.y);
NSLoT将在不识别接收对象的情况下将该值视为NULL。
< P>您也可以像下面的那样做。NSLog(@"%@",[NSValue valueWithCGRect:textView.frame]);
正如其他人所指出的,CGRect只是一个结构,因此缺少-description方法(NSLog使用的NSString的+stringWithFormat静态方法将%@替换为格式字符串)。因此,不能直接将其传递给NSLog 但是,不需要像建议的那样单独输出任何值。Cocoa提供了许多内置方法,可将多个核心图形结构渲染为一个字符串:
NSStringFromCGRect()
NSStringFromCGPoint()
NSStringFromCGSize()
NSStringFromCGAffineTransform()
等等。因此,以字符串形式输出CGRect变得非常容易:
NSLog(@"%@", NSStringFromCGRect(rect));
您可以在“字符串转换”下找到所有这些助手方法。在Swift中很简单:
println("\(textView.frame)")
这是否与框架是一个cgrect这一事实有关,它是一个结构而不是一个类?问题是关于Objective-C,而不是Swift。