使用选择器来调用函数

时间:2011-08-02 10:40:25

标签: iphone objective-c

为什么以下代码不起作用?

[Confirm addTarget:self 
            action:@selector([FunctionsApp Synch_Data:CompIDS]) 
  forControlEvents:UIControlEventTouchUpInside];

下式给出:

  

FunctionsApp:其他类

     

Synch_Data:它在FunctionsApp中的功能

     

CompIDS:其MSmutableArray

2 个答案:

答案 0 :(得分:1)

FunctionsApp *functions = [[FunctionsApp alloc] init];//of course u need to use your own init method
[Confirm addTarget:functions action:@selector(Synch_Data) forControlEvents:UIControlEventTouchUpInside];

选择器u pass只是传递给目标的方法的名称,而目标又检查它是否存在然后调用它。你不能使用一个可变数组作为选择器。由于confirm是一个按钮,因此您应该使用签名为- (void)buttonClicked:(id)sender的方法,其中sender将是按钮。并且因为选择器不是类方法,所以不要像[FunctionsApp buttonClicked:]那样调用它,而是使用FunctionsApp对象引用作为目标(即方法作为目标存在的位置)。 请在下次详细说明你的问题,并对事情有所了解。

答案 1 :(得分:0)

让我们一次拿走这一件事。

<强> 1 -[UIControl addTarget:action:forControlEvents:]action选择器的外观有特定要求。

它可以是以下之一:

- (void)action;
- (void)action:(id)sender;
- (void)action:(id)sender forEvent:(UIEvent *)event;

通常你会使用第二个。

<强> 2 @selector采用您希望在目标上调用的方法(选择器)的名称。您正在指定方法调用的返回值。那是错误,你看到了。

所以要在Sync_Data:上致电syncData:(在objective-c中FunctionsApp),你要写

[Confirm addTarget:FunctionsApp action:@selector(Synch_Data:) forControlEvents:UIControlEventTouchUpInside];

但仍然无法将CompIDS变量作为参数传递,因此我建议您重写代码,使其成为操作方法可以访问的实例变量。