2010-11-29 224 views
13

我正在使用NSLog來檢查UITextView。我在我的代碼如下記錄語句:與NSLog的奇怪行爲

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) 

輸出的第一行,因爲它包含了「框架= (0 0; 320 387)'位,使我相信UITextView的框架變量都已設置。但爲什麼接下來的兩行在這種情況下顯示爲空?他們不應該轉儲框架的值嗎?

預先感謝

+0

這是否與框架是一個結構不是一個類的結構有關? – Chris 2010-11-29 11:17:02

回答

50

正如其他人指出的CGRect只是一個結構,因此,缺乏-description方法(這是什麼,使用的NSString的+ stringWithFormat靜態方法通過NSLog - 用格式字符串替換%@)。因此,您不能直接將它傳遞給NSLog。

但是,不需要像建議的那樣分別輸出任何值。可可提供了大量的內置方法是使幾個核心圖形結構的字符串:

NSStringFromCGRect() 
NSStringFromCGPoint() 
NSStringFromCGSize() 
NSStringFromCGAffineTransform() 

等。因此,在一個字符串的形式輸出的CGRect變得超級簡單:

NSLog(@"%@", NSStringFromCGRect(rect)); 

下可以找到所有這些輔助方法here

4

UIView.frame只是一個CGRect結構(其進而含有CGPointCGSize結構)。 因此不涉及任何類,並且因爲只有類可以具有字符串表示形式,所以會顯示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); 
3

textview。框架將返回一個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); 

的幀值的NSLog將考慮該值作爲空當它不認識的對象是什麼收到。

10

你也可以像下面

NSLog(@"%@",[NSValue valueWithCGRect:textView.frame]); 
-1

在斯威夫特這是簡單的「字符串轉換」:

println("\(textView.frame)") 
+0

問題是關於Objective-C,而不是Swift。 – JasonMArcher 2014-11-27 18:08:13