将选择器名称作为方法参数传递

时间:2012-02-23 09:00:44

标签: objective-c selector nsinvocation

我正在编写一个自定义帮助方法,它会被大量使用并返回几个按钮。按下时,每个按钮当然都有自己的目标选择器,我想将选择器作为参数传递给此方法,以便返回的按钮具有指定的选择器。

但我不确定如何将选择器作为方法参数传递。像这样:

-(returnedInstance)someMethod:(WhatClass?*)selectedFunction{

[SomeClassWithASelectorParameter method:whatever selector:@selector(selectedFunction)];

}

其中selectedFunction是传递给方法的参数。

我尝试将WhatClass?*作为NSString和SEL,但结果是:

[NSInvocation invocationWithMethodSignature:]:方法签名参数不能为零

2 个答案:

答案 0 :(得分:4)

为什么不通过SEL?即选择器。像这样:

-(returnedInstance)someMethod:(SEL)selectedFunction{
    [SomeClassWithASelectorParameter method:whatever selector:selectedFunction];
}

或者,NSSelectorFromString

-(returnedInstance)someMethod:(NSString*)selectedFunction{
    [SomeClassWithASelectorParameter method:whatever selector:NSSelectorFromString(selectedFunction)];
}

答案 1 :(得分:1)

您想使用SEL,当您引用它时,您不必使用selector

-(returnedInstance)someMethod:(SEL)selectedFunction{

    [SomeClassWithASelectorParameter method:whatever selector:selectedFunction];

}