6

I have two strings:

NSString * className = "MyClass";
NSString * methodName = "doSomething";

MyClass class definition and static method doSomething also exists.

How can I trigger [MyClass doSomething] dynamically, from two strings?

knagode
  • 5,816
  • 5
  • 49
  • 65

2 Answers2

22
Class class = NSClassFromString(@"MyClass");
SEL selector = NSSelectorFromString(@"doSomething");
[class performSelector:selector];

This will get you a warning "PerformSelector may cause a leak because its selector is unknown", which you can ignore like this (see this question for details):

Class class = NSClassFromString(@"MyClass");
SEL selector = NSSelectorFromString(@"doSomething");    

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[class performSelector:selector];
#pragma clang diagnostic pop
Community
  • 1
  • 1
DrummerB
  • 39,814
  • 12
  • 105
  • 142
4

You just have to use

[NSClassFromString(className) performSelector:NSSelectorFromString(methodName)];

here is also a related post

Community
  • 1
  • 1
Alex Cio
  • 6,014
  • 5
  • 44
  • 74