Objective C вызывает метод динамически со строкой - PullRequest
71 голосов
/ 15 декабря 2010

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

например. У меня есть метод с именем loaddata

-(void)loadData;

чтобы позвонить, я бы назвал это как

[self loadData];

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

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

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

Есть идеи?

Спасибо

Ответы [ 2 ]

103 голосов
/ 15 декабря 2010

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

SEL s = NSSelectorFromString(selectorName);
[anObject performSelector:s];
11 голосов
/ 15 декабря 2010

Вы можете использовать функцию 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);
...