2013-05-11 2 views
0

클래스 A와 클래스 B의 두 클래스가 있습니다. 컨트롤러에서 동일한 메서드를 호출 할 수 있습니다. 그들이 전화하는 방법은 CGPoint입니다. 논쟁이 어떤 계급에서 비롯되었는지 결정할 수있는 방법이 있습니까?매개 변수가있는 클래스를 검색하는 방법

나는 다음과 같은 사용하여 시도했다 : 당신이 수업 시간에이 방법을 사용하려면이 상황에 대처하기

if ([point isKindOfClass:[_territoryPaths class]]) 
{ 
    NSMutableDictionary *territoryPaths = [_territoryPaths territoryPaths]; 
} 

if ([piont class] == [_territoryPaths class]) 
{ 
    NSMutableDictionary *territoryPaths = [_territoryPaths territoryPaths]; 
} 

point이 방법에 걸리는 CGPoint입니다

+1

짧은 어떻게 든 발신자의 ID를 전달해야 (사람들은 가능한 경우에도). –

+1

여기에서 목표는 무엇입니까? 이것은 나쁜 디자인처럼 들립니다. 그러나 좋은 솔루션을 제공하려면 더 많은 것을 알아야합니다. – rmaddy

+1

(CGPoint는 객체가 아니라 단지 구조체이며, 보통은 명시 적 포인터에 의해 직접 전달됩니다.) –

답변

5

가장 좋은 방법.을 즉 ClassA 또는 ClassB가 아닌 경우에는 보낸 사람을 수락하고 보낸 사람 값에 isKindOfClass를 수행하도록 메서드를 수정해야합니다. 예를 들어

: 호출 스택 정말 색다른 트릭의

- (void)someMethod:(id)sender withPoint:(CGPoint)point 
{ 
    if ([sender isKindOfClass:[ClassA class]]) 
    { 
     // Do class A stuff 
    } 
    else if ([sender isKindOfClass:[ClassB class]]) 
    { 
     // Do class B stuff 
    } 
    else 
    { 
     // Unknown class 
    } 
} 
+1

일반적으로 구현 동작 사이를 전환하기 위해'isKindOfClass :'를 사용하는 것은 잘못된 설계의 표시입니다. 더 나은 해결책은'ClassA'와'ClassB' 둘 모두가 원하는 메소드를 구현하거나 둘 다 적절한 메소드를 스텁 아웃하는 추상 수퍼 클래스로부터 고유 한 클래스를 구현하는 것입니다. – bbum

+1

귀하는 정확합니다. 언급하는 것을 잊어 버린 것을 추가해 주셔서 감사합니다. – Nobosi

관련 문제