【问题标题】:Run method with arguments from NSArray objective-c使用来自 NSArray 目标 c 的参数运行方法
【发布时间】:2013-12-24 11:31:48
【问题描述】:

我有一个数组,其中包含我要调用的方法的所有参数。如何使用数组中的参数运行该方法。

假设我的方法是:-(void)myFunction:(id)sender arg1:(id)arg1 arg2:(id)arg2 我的数组可能有:self, @"myfirst obj", somevar, nil

我想用我的数组中的参数调用myFunction:arg1:arg2:。 我怎样才能做到这一点?

数组大小也可能会改变,因为方法会改变,因为我将代码注入应用程序,所以我无法重命名方法。



注意:我无法更改方法名称

还要注意我的数组项的计数和类型发生了变化。

【问题讨论】:

  • 你想要一个可变参数方法吗?或者只是其中一个参数是一个数组?
  • 如果调用相同的方法,数组大小如何变化?它需要特定数量的参数。你能举个例子说明你是怎么称呼它的,为什么[self myFunction:array[0] arg1:array[1] arg2:array[2]] 不起作用?
  • @Rob Napier 这行不通,因为我的方法不同。
  • @Grady Player 两者都不是。重新阅读问题,我做了一些修改。

标签: objective-c macos methods arguments nsarray


【解决方案1】:

您可以使用NSInvocation 实现此目的

NSArray *arguments = @[self, @1, @2];

NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[self methodSignatureForSelector:@selector(myFunction:arg1:arg2:)]];
invocation.target = self;
invocation.selector = @selector(myFunction:arg1:arg2:);

[arguments enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    [invocation setArgument:&obj atIndex:idx+2]; // You must add 2 to the index as the first 2 argument are reserved for the system 
}];

[invocation invoke];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-14
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    相关资源
    最近更新 更多