2011-08-02 84 views
0

爲什麼下面的代碼不起作用?使用選擇器調用函數

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

給出:

FunctionsApp: its other class

Synch_Data:its function in FunctionsApp

CompIDS: its 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]; 

ü通過選擇是,這是傳遞給誰反過來檢查是否存在目標的方法只是名字,然後調用它。你不能使用可變數組作爲選擇器。因爲confirm是一個按鈕,您應該使用簽名爲- (void)buttonClicked:(id)sender的方法,其中發件人將是按鈕。也因爲選擇器不是類方法,所以您不要將它稱爲[FunctionsApp buttonClicked:],而是使用FunctionsApp對象引用作爲目標(即,方法作爲目標存在的位置)。 下次請詳細說明您的問題,並在具體事情上更具體一些。

+0

u可以在buttonClicked:方法訪問中執行,並執行您想要的CompIDS數組。你也應該閱讀一些初學者指南,命名約定和類似的東西 –

0

讓我們一次採取這一件事。

-[UIControl addTarget:action:forControlEvents:]具有對action選擇可以是什麼樣子的具體要求。

它可以是下列之一:

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

通常,你會用第二個。

2. @selector服用方法(選擇)的名字,你想呼籲的目標。您正在指定方法調用的返回值。這是錯誤,你看到了。

所以調用Sync_Data:(這在Objective-C是syncData:)上FunctionsApp你會寫

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

您仍然可以在CompIDS變量不能作爲參數傳遞,雖然,所以我建議重寫您的代碼,使其成爲實例變量,以便您的操作方法可以訪問。

+0

這意味着我不能通過CompIDS? –

+0

@ cs1.6沒錯。在'action'方法中傳遞的變量是sender,它是觸發消息的'UIControl'。 –

相關問題