Objective C вызов метода динамически со строкой
мне просто интересно, есть ли способ вызвать метод, где я строю имя метода на лету со строкой.
например, у меня есть метод под названием loaddata
-(void)loadData;
чтобы назвать это я обычно называю это как
[self loadData];
но я хочу иметь возможность вызывать его динамически со строкой, например
NSString *methodName = [[NSString alloc] initWithString:@"loadData"];
[self methodName];
Это глупый пример, но надеюсь вы меня поняли. Я использую его для классов привязки данных, которые я настраиваю для своего Приложение для IPad. Трудно объяснить, но чтобы заставить его стрелять, мне нужно выяснить, как вызвать метод со строкой.
какие идеи?
спасибо
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
.