2012-02-09 20 views
1

我有一個UIScrollView的子類,它也是委託。NSSet touchesShouldBegin:UIScrollView只是一個NSString

當我有所謂的下一個協議的功能:

- (BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view 
{ 
id element; 
NSEnumerator *setEnum = [touches objectEnumerator]; 

while ((element = [setEnum nextObject]) != nil) 
{ 
    NSLog(@"element:%@", element);  
} 

return [super touchesShouldBegin:touches withEvent:event inContentView:view]; 
} 

說的NSLog是顯示的唯一的事情是:

element:<UITouch: 0x15a9a0> phase: Ended tap count: 3 window: <UIWindow: 0x392390; frame = (0 0; 320 480); layer = <UIWindowLayer: 0x382cd0>> view: <UIButton: 0x3a5e90; frame = (0 0; 106 138); opaque = NO; layer = <CALayer: 0x3a3e90>> location in window: {228, 126} previous location in window: {227, 126} location in view: {89.6667, 77} previous location in view: {88.3333, 77} 

的問題是,它顯示的NSSet的內容作爲一個大NSString的。如果我詢問objectEnumerator的所有對象,我只需要在NSArray中獲得一個對象。與NSLog完全相同的對象(NSString)正在顯示。

有人可以告訴我,如果我做錯了什麼,或者如果NSSet只是給一個NSString是不正常的。

謝謝!

+0

我感到困惑,它確實看起來像一個字符串。將對象從[objectEnumerator nextObject]放置在UITouch變量中幫助!謝謝大家對於快速響應 – MiiChiel 2012-02-09 18:26:29

回答

3

NSLog()輸出是在對象上調用description方法的結果。輸出被設計爲僅用於調試的人類可讀性。

<UITouch: 0x15a9a0>指示該對象在地址0x15a9a0處爲UITouch。其餘的描述只是顯示UITouch的一些有趣值。

嘗試:

NSLog(@"tap count:%d", element.count); 

等會讓你本身,它不只是一個字符串。

順便說一句,沒有必要明確地NSEnumerator,CA可以使用快速列舉:可以簡化代碼:

for (UITouch *element in touches) 
{ 
    NSLog(@"element:%@", element);  
} 
+0

我明白了,但是不應該當我在'while'循環中使用NSLog中的一個元素時,我只會在控制檯中顯示所有對象中的一個? – MiiChiel 2012-02-09 18:16:31

+0

你正在得到一個對象的描述,'UITouch'和作爲它的一些狀態。 – zaph 2012-02-09 18:25:05

+0

奧克,謝謝我解決了問題。 – MiiChiel 2012-02-09 18:31:51

1

的NSSet中接觸是一組UITouch實例,而不是NSString的的。當你將它發送給NSLog時,它會調用返回NSString的UITouch實例的「description」方法。

+0

謝謝你的幫助,將第一個'nextObject'放在UITTouch變量中讓我成爲對象。 – MiiChiel 2012-02-09 18:29:37

相關問題