2013-03-06 118 views
0

我是一个非常新的iOS开发人员(我只是在几天前开始),我试图利用我在Storyboard上的UIWebView来使用WebViewJavascriptBridge class。每当我尝试使用它时,都会遇到EXEC_BAD_ACCESS错误。使用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试了一下,但仍然得到了错误,尽管也许我做错了。

有什么建议吗?

编辑:用于存储web视图

方法是这样的代码+基准出口。

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

回答

1

EXC_BAD_ACCESS通常在您尝试访问已被释放的目标C对象时发生。我无法从您发布的代码中看到问题,所以实际问题可能在其他地方。检查你的属性 - 是否应该是strong实际上是这样声明的?

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

webView在哪里声明,怎么样?

我认为你使用ARC?

更新

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

你声明你麻烦的对象作为一个局部变量:

WebViewJavascriptBridge* bridge = ... 

这意味着一旦该功能范围左(即到达函数的结尾),该对象可以被释放,并是。

尝试为您的bridge声明一个强属性。那么它将不会被过早释放。例如:

@property (strong, nonatomic) WebViewJavascriptBridge* bridge; 

然后后面的代码:

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

一旦你与你的目标完成后,不要忘了释放它:

self.bridge = nil; 
+0

谢谢,帮了很多忙。这是报告'[WebViewJavascriptBridge respondsToSelector:]:消息发送到释放的实例0x1d5a97e0'现在弄清楚如何调试...我还更新了我的代码,如何声明webView的答案。 – mattsven 2013-03-06 14:40:28

+0

解决了!谢谢。 – mattsven 2013-03-06 16:19:02