将parameter passing给Objective-C中的select器

我的function看起来像这样

-(void) doTransition:(id)sender withID:(int) n 

如何将int n传递给select器,

 target:self selector:@selector(doTransition:)withID:3 

这是行不通的

请帮忙谢谢

简短的回答是,你没有。 诸如performSelector之类的方法被设置为传递NSObject作为参数,而不是标量值。

有一个方法performSelector:withObject:withObject:它将调用一个有2个对象参数的方法。

你可以通过创build一个NSInvocation触发一个具有任何types的参数的方法,但这是一个相当多的工作,并有点棘手要弄清楚如何做到这一点。

在你的情况下,重构你的方法将ID参数作为一个NSNumber对象会更简单。

所以,我谷歌“调用与参数select器”,并得到了一堆结果,其中第一个是这里的一个问题SO: Objective-C:调用具有多个参数的select器

答案最多的有一些细节,具体是:

 [selectorTarget performSelector:mySelector withObject:@3]; 

这是一个简单的任务。 更多信息可以在链接的问题/答案区域find。

注意我传递的@3 ,它不是一个int而是一个NSNumber 。 如果你有一个int值,你可以很容易地通过执行[NSNumber numberWithInt:myIntValue]来得到一个NSNumber@3是在3.4节中用于创build具有整数值的NSNumber简写语法。 在这里使用NSNumber而不是int是很重要的,因为这个select器调用需要一个idtypes作为withObject:参数,所以我需要一个对象,而不是一个原始types(编译器是否为你自动换行,我不能说)。

另一个重要的注意事项是有三个performSelector:函数定义:

 - (id)performSelector:(SEL)aSelector; - (id)performSelector:(SEL)aSelector withObject:(id)anObject; - (id)performSelector:(SEL)aSelector withObject:(id)anObject withObject:(id)anotherObject; 

所以你可以看到你可以使用不带值和函数的函数,这些函数将一个或两个值作为select器,但除了你最有可能需要编写自己的逻辑来调用大于2的函数以外。

你需要传递一个你想发送的值的NSDictionary,如下所示:

 NSDictionary *myDictionary = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:3] forKey:@"myInt"];