[Xcode]UIButtonでボタンを押した時にEXC_BAD_ACCESSエラーが出る時の対処

Medium 7568736922 photo credit: KamrenB Photography via photopin cc

こんにちは、ボーノです。

かなりはまったので紹介。

EXC_BAD_ACCESSエラー

エラーが発生している場所が分かり辛い、やっかいなエラー。

どうやら、メモリに関するエラーの時に出るみたい。

UIButtonの時に出たら

ボタンを押した時に出現する事が多い。

良くあるのは、addTarget:self action:@selector(hogeHoge)と書いておきながらメソッドが -(void)hogeHoge:(id)senderというように":"を忘れていた場合に出たりするようだ。

ただし、今回はそこは問題なく、一見して完璧なコードにも見える。

//ボタンを呼び出すコード
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ファイル内に下記のように呼び出し先の宣言をしておく

#import <UIKit/UIKit.h>
#import "Hoge2ViewController.h" //呼び出し先のviewController

@interface HogeViewController : UIViewController {
    //ここでviewControllerを宣言しておく
    Hoge2ViewController *hoge2ViewController;
}
@end

これで直りました。

下記サイトに救われました。感謝!

addSubViewした画面においたUIButtonをクリック時にEXE_BAD_ACCESS | EUI – iPhoneやandroidスマートフォンアプリの開発を教えるスクール