16608


UIWevViewのdelegateメソッドでフックして処理を行います。  
コードの見通しをよくするため、UIWebViewのviewとcontrollerを切り離してプログラムする方法を教えていただきたいです。  
具体的には、UIWebViewのdelegateメソッドでの処理を、他クラスで定義（コードを外出し）したいです。

単純にwebViewのデリゲートに他クラスインスタンスをセットすればよいだけかと思っていたのですが、私の実装した方法ですと以下のエラーが表示されました。

Thread 1:EXC_BAD_ACCESS(code=1,address=0x0)

ソースはgithubにコミットしました。  
お力添えいただけると幸いです。

<https://github.com/siroop/test_webview.git>


CC BY-SA 3.0
2015-09-14T15:57:21.253
16607
2015-09-14T17:05:37.427
12326
question
ios objective-c
UIWebViewのdelegate処理を別クラスに切り離す方法について


読んでみました

[code]

    - (void)viewDidLoad {
        [super viewDidLoad];
    
        webViewController *vc = [webViewController new];
        self.webView.delegate = vc;
    
        [self loadContents];
    }
    
[/code]

`UIWebView`の`delegate`プロパティはドキュメントによると次のように定義されていました。

[code]

    @property(nonatomic, assign) id< UIWebViewDelegate > delegate
    
[/code]

ということは、代入しても参照カウンタは増えません。なので、変数`*vc`に入っているオブジェクトは、この`viewDidLoad`を抜けると破棄されてしまいます。

`ViewController`にプロパティとして追加し、次のようにしてみてはどうでしょうか？

[code]

    - (void)viewDidLoad {
        [super viewDidLoad];
    
        self.vc = [webViewController new];
        self.webView.delegate = self.vc;
    
        [self loadContents];
    }
    
[/code]


CC BY-SA 3.0
2015-09-14T17:05:37.427
16608
2015-09-14T17:05:37.427
845
16607
answer