为什么以下代码不起作用?
[Confirm addTarget:self
action:@selector([FunctionsApp Synch_Data:CompIDS])
forControlEvents:UIControlEventTouchUpInside];
下式给出:
FunctionsApp:其他类
Synch_Data:它在FunctionsApp中的功能
CompIDS:其MSmutableArray
答案 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
变量作为参数传递,因此我建议您重写代码,使其成为操作方法可以访问的实例变量。