使用WebViewJavascriptBridge时出现EXEC_BAD_ACCESS错误
问题描述:
我是一个非常新的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
答
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;
谢谢,帮了很多忙。这是报告'[WebViewJavascriptBridge respondsToSelector:]:消息发送到释放的实例0x1d5a97e0'现在弄清楚如何调试...我还更新了我的代码,如何声明webView的答案。 – mattsven 2013-03-06 14:40:28
解决了!谢谢。 – mattsven 2013-03-06 16:19:02