0

私は非常に新しい iOS 開発者です (数日前に始めたばかりです)、ストーリーボードにある UIWebView でWebViewJavascriptBridge クラスを利用しようとしています。使用しようとすると、EXEC_BAD_ACCESS エラーが発生します。

問題のある行は次のようです。

- (void)viewDidLoad
{
    [super viewDidLoad];

    WebViewJavascriptBridge* bridge = [WebViewJavascriptBridge bridgeForWebView:webView handler:^(id data, WVJBResponseCallback responseCallback) {
        NSLog(@"Received message from javascript: %@", data);
        responseCallback(@"Right back atcha");
    }];

    webView.scrollView.bounces = NO;

    [[UIApplication sharedApplication] setStatusBarHidden:YES];

    NSString *path = [[NSBundle mainBundle] bundlePath];
    path = [NSString stringWithFormat:@"%@/%s", path, "htdocs/index.html"];
    NSURL *URL = [NSURL fileURLWithPath:path];

    [webView loadRequest:[[NSURLRequest alloc] initWithURL:URL]];
}

正確には、最後の行。そのリクエストを行わなければ、エラーは発生しません。Objective-C だけで作成された UIWebView で試してみましたが、それでもエラーが発生しましたが、間違っていた可能性があります。

助言がありますか?

編集:

webViewの格納方法はこのコード+リファレンスアウトレットです。

@interface mcViewController : UIViewController
    {
        IBOutlet UIWebView *webView;
    }
@end
4

1 に答える 1

1

EXC_BAD_ACCESS通常、割り当てが解除された目的の C オブジェクトにアクセスしようとしたときに発生します。あなたが投稿したコードからは問題が見えないので、実際の問題は別の場所にある可能性があります。プロパティを確認してください -strong実際にそのように宣言する必要があるものはすべてありますか?

解放後にアクセスされたオブジェクトのタイプに関する情報をゾンビが取得できるようにしてください。

どこwebViewで、どのように宣言されていますか?

ARCを使用していると思いますか?

アップデート

わかりました、私は今問題を見ていると思います。

問題のあるオブジェクトをローカル変数として宣言しています。

WebViewJavascriptBridge* bridge = ...

これは、その関数スコープを離れると (つまり、関数の最後に到達すると)、そのオブジェクトの割り当てを解除できることを意味します。

bridge代わりに、強力なプロパティを宣言してみてください。その後、時期尚早に割り当てが解除されることはありません。例えば:

@property (strong, nonatomic) WebViewJavascriptBridge* bridge;

その後、コードで次のようにします。

self.bridge = ... // the creation code

オブジェクトの処理が完了したら、忘れずに割り当てを解除してください。

self.bridge = nil;
于 2013-03-06T08:06:32.530 に答える