addSubViewした画面においたUIButtonをクリック時にEXE_BAD_ACCESS
新しいiOSだと、
今までのコードの書き方ではEXE_BAD_ACCESSでおちてしまう事があります。
2番目の画面をViewControllerサブクラスで作成して
単純な画面移動を試していた時に発見つけました。
2番目の画面のボタンをタッチすると落ちてしまうんです。
コードは以下の通りです。
FirstViewController.hファイル
#import <UIKit/UIKit.h>
#import “SecondView.h”
@interface FirstViewController : UIViewController{
//ここに共有変数として用意すると落ちなくなる
SecondView *second;
}
- (IBAction)myActionNextView:(id)sender;
@end
FirstViewController.mファイル
- (IBAction)myActionNextView:(id)sender {
//以前の書き方:この書き方だと、2番目の画面のボタンをおした際に落ちてしまう
//SecondView *second = [[SecondView alloc] initWithNibName:@”SecondView” bundle:nil];
second = [[SecondView alloc] initWithNibName:@”SecondView” bundle:nil];
[self.view addSubview:second.view];
}
SecondView.hファイル
#import <UIKit/UIKit.h>
@interface SecondView : UIViewController
- (IBAction)myActionBackView:(id)sender;
@end
SecondView.mファイル
- (IBAction)myActionBackView:(id)sender {
[self.view removeFromSuperview];
}
今後改善されるかもしれませんが、今の所ARCの関係で以前の書き方ではダメのようです。
単純な画面遷移をして詰まっている方は、2番目の画面に当たるUIViewControllerサブクラスを
hファイルに宣言してからalloc + initWithNibNameしてみて下さい。
関連している記事:
- [iOS 6] social frameworkをつかってFacebookとTwitterへの投稿ボタンを作ってみる
- iPhoneアプリ開発基本(9)
- cocos2d でボタンを押して画面遷移をする
- cocos2dでスプライトをファイル化する
- 【Xcode4】クラスリファレンスをXcode内で確認する方法