Как вызвать метод класса из NSString в obj-c? - PullRequest
5 голосов
/ 07 июня 2011

В obj-c как мне позвонить

[myClass myString];

где myString = @"myMethod";

Что должно быть эквивалентно [myClass myMethod];

Не уверен, возможна ли такая манипуляция мета-языком.

Ответы [ 5 ]

9 голосов
/ 07 июня 2011
[myClass performSelector: NSSelectorFromString(myString)];

Документы:

1 голос
/ 07 июня 2011

Вы можете использовать NSSelectorFromString, что-то вроде следующего должно работать:

 SEL selector = NSSelectorFromString(@"myMethod");
 [myClass performSelector:selector withObject:nil];
1 голос
/ 07 июня 2011

[myClass class] возвращает метакласс, методы класса вызываются для метакласса.Например,

[NSString someClassMethod];

NSString *instanceOfString = @"some string instance";
[[instanceOfString class] someClassMethod];

РЕДАКТИРОВАТЬ: я неправильно понял вопрос.Используйте NSSelectorFromString, чтобы получить SEL из строки NSString.Это задокументировано в справочнике по основным функциям Apple , где вы также увидите NSClassFromString, NSStringFromClass, NSStringFromSelector, NSStringFromProtocol и NSProtocolFromString среди других.

0 голосов
/ 07 июня 2011

В качестве альтернативы, если вам нужно больше гибкости в аргументах и ​​/ или типах возвращаемых данных, чем performSelector:, и друзья дадут вам, взгляните на класс NSInvocation .

0 голосов
/ 07 июня 2011
SEL mySelector = NSSelectorFromString(@"myMethod");
[myClass performSelector:mySelector];
...