Objective C вызов метода динамически со строкой


мне просто интересно, есть ли способ вызвать метод, где я строю имя метода на лету со строкой.

например, у меня есть метод под названием loaddata

-(void)loadData;

чтобы назвать это я обычно называю это как

[self loadData];

но я хочу иметь возможность вызывать его динамически со строкой, например

NSString *methodName = [[NSString alloc] initWithString:@"loadData"];
[self methodName];

Это глупый пример, но надеюсь вы меня поняли. Я использую его для классов привязки данных, которые я настраиваю для своего Приложение для IPad. Трудно объяснить, но чтобы заставить его стрелять, мне нужно выяснить, как вызвать метод со строкой.

какие идеи?

спасибо

3 70

3 ответа:

вы можете попробовать что-то вроде

SEL s = NSSelectorFromString(selectorName);
[anObject performSelector:s];

вы можете использовать функции objc_msgSend. Он принимает два параметра, приемник и селектор, чтобы отправить на него:

objc_msgSend(self, someSelector);

вам нужно будет превратить вашу строку в соответствующий селектор с помощью NSSelectorFromString:

NSString *message = [self getSomeSelectorName];
objc_msgSend(self, message);

метод также принимает переменное количество аргументов, поэтому вы можете отправлять сообщения с любым количеством аргументов.

NSString *message = [self getSomeSelectorNameWithManyArguments];
objc_msgSend(self, message, arg1, arg2, arg3, arg4);

вам нужно NSSelectorFromString.