使用WebViewJavascriptBridge时出现EXEC_BAD_ACCESS错误

时间:2013-03-06 07:05:11

标签: javascript ios objective-c

我是一个非常新的iOS开发人员(我几天前才开始),我正在尝试将WebViewJavascriptBridge class与我在Storyboard上使用的UIWebView一起使用。每当我尝试使用它时,我都会收到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

1 个答案:

答案 0 :(得分:1)

当您尝试访问已解除分配的目标C对象时,通常会发生

EXC_BAD_ACCESS。我发布的代码无法看到问题,因此实际问题可能出在其他地方。检查你的属性 - 应该是strong实际声明的那一切吗?

enable zombies获取有关解除分配后访问的对象类型的信息。

webView在哪里声明,以及如何?

我认为你在使用ARC?

<强>更新

好的,我想我现在看到了问题。

您将麻烦的对象声明为局部变量:

WebViewJavascriptBridge* bridge = ...

这意味着一旦剩下该函数作用域(即到达函数的末尾),该对象就可以被释放,并且是。

尝试为bridge声明一个强大的属性。然后它不会过早解除分配。例如:

@property (strong, nonatomic) WebViewJavascriptBridge* bridge;

然后在你的代码中:

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

一旦你完成了你的对象,不要忘记取消分配它:

self.bridge = nil;