2013-06-02 1 views
0

У меня возникла проблема с ответомToSelector с NSMutableSet.NSMutableSet отвечаетToSelector 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: ул, но программа всегда говорит, что NSMutableSet не реагирует на AddObject :.

Я не знаю, почему responseSToSelector всегда говорит, что 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' возвращает' Class', который является общим типом класса Objective-C, компилятор не имеет никакого способа или не знает, на какие сообщения он отвечает. –

+0

oh, это имеет смысл. Спасибо. –