2011-08-02 12 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

エラー:メソッド名が@selectorになく、予期している:tokenより前[ –

答えて

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が通過セレクタは、これがターンチェックに存在する場合、ターゲットに渡されるメソッドの名前だけであり、それを呼び出します。セレクタとして可変配列を使用することはできません。 confirmはボタンなので、送信者がボタンになる場合は、- (void)buttonClicked:(id)senderという署名付きのメソッドを使用する必要があります。セレクタはクラスメソッドではないため、[FunctionsApp buttonClicked:]のように呼び出すのではなく、代わりにFunctionsAppオブジェクト参照をターゲットとして使用します(つまり、メソッドがターゲットとして存在する場所)。 次回はあなたの質問を詳しく説明し、どんなことがあるかを少し具体的にしてください。

+0

] buttonClicked:メソッドの内部で、CompIDS配列にアクセスすることができます。あなたはまた、命名規則やそのようなものに関する初心者ガイドを読んでください。 –

0

一度に1つのことを考えてみましょう。

1. -[UIControl addTarget:action:forControlEvents:]actionセレクタがどのように見えることができるものに固有の要件があります。

これは、次のいずれかになります。

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

通常は2番目のものを使用すると思います。

2. @selectorあなたがターゲットに求めているしたいのですが方法(セレクタ)の名前を取ります。メソッド呼び出しの戻り値を指定しています。それはエラーです、あなたは見ています。

のでFunctionsApp上(Objective-CでsyncData:だろう)Sync_Data:を呼び出すためにあなたが

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

を書きたいあなたはまだかかわらず、パラメータとしてCompIDS変数を渡すことはできませんので、私は思いますあなたのコードを書き直し、アクションメソッドがアクセスできるインスタンス変数にすることをお勧めします。

+0

これは、私がCompIDSを渡すことができないことを意味しますか? –

+0

@ cs1.6そうですね。 'action'メソッドで渡される変数は送信者です。これはメッセージをトリガした' UIControl'でしょう。 –

関連する問題