我是一个非常新的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
答案 0 :(得分:1)
EXC_BAD_ACCESS
。我发布的代码无法看到问题,因此实际问题可能出在其他地方。检查你的属性 - 应该是strong
实际声明的那一切吗?
请enable zombies获取有关解除分配后访问的对象类型的信息。
webView
在哪里声明,以及如何?
我认为你在使用ARC?
<强>更新强>
好的,我想我现在看到了问题。
您将麻烦的对象声明为局部变量:
WebViewJavascriptBridge* bridge = ...
这意味着一旦剩下该函数作用域(即到达函数的末尾),该对象就可以被释放,并且是。
尝试为bridge
声明一个强大的属性。然后它不会过早解除分配。例如:
@property (strong, nonatomic) WebViewJavascriptBridge* bridge;
然后在你的代码中:
self.bridge = ... // the creation code
一旦你完成了你的对象,不要忘记取消分配它:
self.bridge = nil;