EXC_BAD_ACCESSは、「あるメモリにアクセスしようとしたが、そのメモリ領域にあったデータは既に解放されていた」という場合などに出るものです。
今回の場合は、ここで設定しているデリゲートがすぐに解放されてしまうのが原因かと思われます。
Objective
1webViewController *vc = [webViewController new];
2self.webView.delegate = vc;
強参照(強い参照)と弱参照(弱い参照)というものをご存知でしょうか?
強参照は、一般的ないわゆる「参照」を指します。基本的に、強参照が1つ以上あるインスタンスはGCの対象になりません。逆に、弱参照はいくつあろうと、強参照が無いならばGCの対象になる、というものです。
一般的にdelegate
は、循環参照が起こらないように、弱参照として宣言します。
なので、viewDidLoad
の処理が終了した時点で、強参照vc
が無くなり、強参照が無くなったwebViewController
インスタンス(self.webView.delegate
の参照先)は解放されてしまいます。
強参照が無くなることにより解放されてしまうのなら、1つ以上の強参照があればいいのです。
ViewControllerのプロパティとして保持するとか
Objective
1// ViewController.m
2@interface ViewController ()
3// strongはデフォルトなので省略可能ですが、強参照であることを強調するためにあえて
4@property (nonatomic, strong) webViewController *vc;
5@end
6
7@implementation ViewController
8- (void)viewDidLoad {
9 [super viewDidLoad];
10
11 self.vc = [webViewController new];
12 self.webView.delegate = self.vc;
13
14 [self loadContents];
15}
16// 以下略
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。