2

私がしようとしているのは、作成されたそれぞれのUIButtonのための単一の機能を持ち、その動作を決定するために関数内のスイッチを使用することです。ボタンをスイッチを使用するように設定していますが、実際にはそれほど遠くはありません。ARCの使用中にUIButtonをメモリに保持するにはどうすればよいですか?

for var(int i = 0; i < numResults; i++) 
{ 
    UIButton* button = [[UIButton] alloc] initWithFrame:CGRectMake(0,(i*55)+10,320,50)]; 
    [buttton setTag:i]; 
    [button addTarget:self action:@selector(buttonHandler) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:button]; 
} 

    ... 

-(void) buttonHandler:(id)sender 
{ 
    //Handle the button press 
} 

私はボタンのいずれかをクリックするとアプリがエラーをスロー:

-[WatchViewController buttonHandler]: unrecognized selector sent to instance 0x6845430

私は自動解放、それへの参照がないよう、ボタンの変数が作成されたためであると信じている、とARCによって呼び出されるため、関数が呼び出されるときには存在しなくなります。残念ながら、メモリ内の各ボタンへの参照を保持する方法はわかりません。

私が間違っている(または私が書いたことが貧弱な練習である)場合は、私に教えてくれると教えてください。

答えて

6

ご使用の問題は@selector(buttonHandler)です。あなたは@selector(buttonHandler:)を意味しました。最後に余分なコロンがあることに注意してください。私は、この種の間違いを犯すために「宣言されていないセレクタ」(-Wselector)警告をオンにしたい。

+0

ありがとう、私はそれが必要であることを認識していませんでしたが、今あなたはそれが完璧な意味があると言いました。明らかに私は間違った木を完全に吠えていました! – mrh89

関連する問題