2012-02-09 101 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

相关问题