Objective-C - разобрать NSString в вызываемый метод - PullRequest
2 голосов
/ 20 февраля 2012

Могу ли я проанализировать NSString, чтобы он вызвал метод, соответствующий его имени в Objective-C?Вот пример:

Если бы у меня была строка с именем doSomething, и у меня был метод с именем -(void) doSomething, я мог бы сделать что-то вроде scanf, чтобы проанализировать любой текст, который я набрал, чтобы проверить, есть либыл ли какой-либо метод, соответствующий этому, и если да, то вызовите этот метод?

Ответы [ 2 ]

3 голосов
/ 20 февраля 2012

Попробуйте NSSelectorFromString (@ "methodName"); и связанные методы NSObject, такие как responsedsToSelector:

0 голосов
/ 20 февраля 2012

Ответ jxpx777 даст вам информацию, которую вы искали, но в случае, если вам нужно больше, среда выполнения имеет длинный список функций C, которые обеспечивают довольно полный самоанализ объектов и классов.

Например, если вы хотите NSArray имен методов, реализованных классом, вы можете сделать что-то вроде этого:

Class myClass = [self class];

unsigned int methodCount;

Method *methods = class_copyMethodList(myClass, &methodCount);

NSMutableArray *methodNames = [NSMutableArray arrayWithCapacity:10];

for (int i = 0; i < methodCount; i++) {

    const char *methodNameCStr = sel_getName(method_getName(methods[i]));

    NSString *methName = [NSString stringWithCString:methodNameCStr 
                                            encoding:NSASCIIStringEncoding];

    [methodNames addObject:methName];
}

free(methods);

NSLog(@"Methods: %@", methodNames);

Вы заметите, что простые вызовы C и Objective-C / Cocoa смешиваются свободно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...