photo credit: KamrenB Photography via photopin cc
こんにちは、ボーノです。
かなりはまったので紹介。
EXC_BAD_ACCESSエラー
エラーが発生している場所が分かり辛い、やっかいなエラー。
どうやら、メモリに関するエラーの時に出るみたい。
UIButtonの時に出たら
ボタンを押した時に出現する事が多い。
良くあるのは、addTarget:self action:@selector(hogeHoge)と書いておきながらメソッドが -(void)hogeHoge:(id)senderというように":"を忘れていた場合に出たりするようだ。
ただし、今回はそこは問題なく、一見して完璧なコードにも見える。
1 2 3 4 5 6 7 8 9 10 11 12 13 | //ボタンを呼び出すコード UIButton *cancelButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; cancelButton.frame = CGRectMake(100, 300, 80, 50); [cancelButton setTitle:@"キャンセル" forState:UIControlStateNormal]; [cancelButton addTarget:self action:@selector(hogeHoge) forControlEvents:UIControlEventTouchDown]; [self.view addSubview:cancelButton]; //ボタンが押されたら実行されるメソッド -(void)hogeHoge { NSLog(@"test OK"); } |
完全にこれははまった。
結論を言うと、呼び出し元での一工夫が必要だったみたい。 .hファイル内に下記のように呼び出し先の宣言をしておく
1 2 3 4 5 6 7 8 9 | #import <UIKit/UIKit.h> #import "Hoge2ViewController.h" //呼び出し先のviewController @interface HogeViewController : UIViewController { //ここでviewControllerを宣言しておく Hoge2ViewController *hoge2ViewController; } @end |
これで直りました。
下記サイトに救われました。感謝!
addSubViewした画面においたUIButtonをクリック時にEXE_BAD_ACCESS | EUI - iPhoneやandroidスマートフォンアプリの開発を教えるスクール