Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSLog的奇怪行为_Ios_Objective C_Cocoa Touch_Uitextview_Nslog - Fatal编程技术网

Ios NSLog的奇怪行为

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检查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: <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。