2013-06-02 1 views
0

NSMutableSet을 사용하여 respondsToSelector에 문제가 있습니다.NSMutableSet respondsToSelector addObject : false를 반환합니다.

NSArray *arguments = [[NSProcessInfo processInfo] arguments]; 
theClass = [arguments objectAtIndex: 1]; 
theMethod = [arguments objectAtIndex: 2]; 
theArgument = [arguments objectAtIndex: 3]; 

id object = [[NSClassFromString(theClass) init] autorelease]; 

if([object respondsToSelector:NSSelectorFromString(theMethod)]) { 
    NSLog(@"Result: %@", 
    [object performSelector:NSSelectorFromString(theMethod) withObject: theArgument]); 
} else { 
    NSLog(@"Class %@ doesn't respond to %@.", 
    theClass, theMethod); 
} 

내가 ./program NSMutableSet addObject 사용하여 전화 :

나는이 같은 프로그램이 STR을하지만, 프로그램은 항상 NSMutableSet이 addObject에 응답하지 않는 것을 말한다 :.

respondsToSelector가 항상 NSMutableSet이 addObject에 응답하지 않는다고 말하는 이유를 모르겠습니다. ./program NSMutableSet allObjects과 동일합니다. 당신은 완전히 다른 무언가를 확인했다

+3

'[[NSClassFromString (theClass) init]'은 [[NSClassFromString (theClass) alloc] init]'...이어야합니다. ... –

+0

감사합니다. 이제 작동합니다. –

+1

** 당신은 ** 이것이 왜 필요한지 (즉, 오타 였음을 알고 있습니다) 또는'[NSClassFromString (theClass) init]'이 괜찮다고 생각 했습니까? –

답변

2

...

[NSClassFromString(theClass) init] 

대신

[[NSClassFromString(theClass) alloc] init] 

할 필요가있다.

+0

이 오류는 이해하지만 컴파일러에서 나에게 경고하지 않은 이유는 무엇입니까? –

+0

@LucasKreutz'NSClassFromString'은 일반적인 Objective-C 클래스 유형 인'Class'를 반환하기 때문에 컴파일러는 어떤 메시지에 응답하는지 알지 못합니다. –

+0

오, 그 말이 맞는 것입니다. 고맙습니다. –

관련 문제