0

我是一个非常新的 iOS 开发人员(我几天前才开始),我正在尝试将WebViewJavascriptBridge 类与我的 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的方法就是这个代码+参考outlet。

@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 回答