Я бы посмотрел на использование NSInvocation - вы можете создать его, используя сигнатуру метода, на которую вы нацеливаетесь, а затем использовать установщики для каждого объекта следующим образом:
NSInvocation *invoker = setup invoker here...
for ( int i = 0; i < actions.count; i++ )
{
NSObject *arg = [actions objectatIndex:i];
[invoker setArgument:&arg atIndex:i+2];
}
[invoker setArgument:nil atIndex:i+2];
Бит i + 2 объясняется тем, что первые два аргумента действительно являются собственными и _cmd, поэтому вы устанавливаете все, начиная с индекса 2 и далее ... читайте документы по setArgument: atIndex: in NSInvocation для получения более подробной информации.
Как только вы это сделаете, вы можете вызвать операцию с целью. Я никогда не использовал это с переменными методами аргументов, поэтому я не уверен, насколько хорошо он там работает, но это единственный известный мне способ динамического построения вызова во время выполнения.