ボタンを作成してアクションを追加しましたが、起動した途端にこのようなエラーが発生しました。
-[NSCFDictionary numberButtonClick:]: unrecognized selector sent to instance
0x3d03ac0 2010-03-16 22:23:58.811
Money[8056:207] *** Terminating app
due to uncaught exception
'NSInvalidArgumentException', reason:'*** -[NSCFDictionary numberButtonClick:]: unrecognized selector sent to instance 0x3d03ac0'
これが私のコードです。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
UIButton *numberButton = [UIButton buttonWithType:UIButtonTypeCustom];
numberButton.frame = CGRectMake(10, 435, 46, 38);
[numberButton setImage:[UIImage imageNamed:@"one.png"] forState:UIControlStateNormal];
[numberButton addTarget:self action:@selector(numberButtonClick:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview: numberButton];
}
return self;
}
-(IBAction)numberButtonClick:(id)sender{
NSLog(@"---");
}
私のようにGoogle経由でここにたどり着いた人は、おそらくXcode 4.2+/iOS 5+の方が関係していると思いますが、ARCの場合はどうでしょうか。私も同じように「unrecognized selector sent to instance"」というエラーが出ました。私の場合は、UIButton'のターゲットアクションが自分自身を送信者パラメータとして渡すように設定していましたが、後にその必要がないことに気づき、コード内でそれを削除しました。つまり、次のようなものです。
- (IBAction)buttonPressed:(UIButton *)sender {
に変更しました。
- (IBAction)buttonPressed {
問題のUIButtonを右クリックすると、Touch Up InsideイベントがビューコントローラのbuttonPressed:メソッドに関連付けられていることがわかりました。これを削除して、修正したメソッドに再割り当てするとうまくいきました。
この問題に対するGoogleのトップアンサーでしたが、私には別の原因・結果がありました。他の人がこの問題に遭遇したときのために、私の意見を加えておこうと思いました。
ちょうど今朝、同じような問題が発生しました。 問題が発生しているUIアイテムを右クリックすると、どのような接続が作成されているかを確認できることがわかりました。 私の場合は、ボタンが2つのアクションに接続されていました。 右クリックメニューからアクションを削除し、再配線したところ、問題が解決しました。
ですから、アクションが正しく配線されていることを確認してください。