2012-02-09 2 views
1

UIScrollView의 하위 클래스가 있는데,이 클래스는 또한 위임자입니다.touches의 NSSetShouldBegin :의 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에서 allObjects를 요청하면 NSArray에서 하나의 객체 만 얻습니다. NSLog와 똑같은 객체 (NSString)가 표시됩니다.

누군가 내가 잘못하고 있는지, 아니면 NSSet이 NSString 하나만주고있는 것이 정상적이지 않은지 말해 줄 수 있습니까?

감사합니다.

+0

나는 혼란 스러웠다. 실제로 끈처럼 보였다. UITouch 변수에서 [objectEnumerator nextObject]의 객체를 배치하면 도움이되었습니다! – MiiChiel

답변

3

NSLog() 출력은 개체에서 호출 된 description 메서드의 결과입니다. NSLog() 출력은 디버깅을 위해서만 사람이 읽을 수 있도록 설계되었습니다.

<UITouch: 0x15a9a0>은 개체가 주소 0x15a9a0에 UITouch임을 나타냅니다. 나머지 설명에는 UITouch의 흥미로운 값이 표시됩니다. 그냥 문자열이 아닌

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

등 당신은 것 자체 :

보십시오. AS를

옆으로, 빠른 열거를 사용할 수 ca를 명시 적 NSEnumerator에 대한 필요가 없습니다 다음 NSSet 만지는

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

모두 고마워요.하지만 NSLog를 사용하여 'while'루프에서 하나의 요소 만 사용하면 콘솔에 모든 객체 중 하나만 표시 될 수 있습니다. – MiiChiel

+0

당신은 하나의 객체에 대한 설명 인'UITouch'를 얻었고 그 중 일부는 상태였습니다. – zaph

+0

오케, 고맙습니다. 문제가 해결되었습니다. – MiiChiel

1

이 UITouch 인스턴스가 아닌 NSStrings의 집합입니다 : 당신이 코드를 단순화 할 수 있습니다. NSLog로 보낼 때 NSString을 반환하는 UITouch 인스턴스의 "설명"메서드를 호출합니다.

+0

UITTouch 변수에 첫 번째 'nextObject'를 삽입하면 도움이되었습니다. – MiiChiel

관련 문제