[英]EXEC_BAD_ACCESS error when using WebViewJavascriptBridge
我是一個非常新的 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
EXC_BAD_ACCESS
通常在您嘗試訪問已被釋放的目標 C 對象時發生。 我從您發布的代碼中看不到問題,因此實際問題可能在其他地方。 檢查你的屬性——所有應該是strong
的東西實際上都是這樣聲明的嗎?
請啟用僵屍以獲取有關釋放后訪問的對象類型的信息。
webView
在哪里聲明,如何聲明?
我認為您正在使用ARC?
更新
好的,我想我現在看到了問題所在。
您將麻煩的對象聲明為局部變量:
WebViewJavascriptBridge* bridge = ...
這意味着一旦離開該函數范圍(即到達函數的末尾),該對象就可以被釋放,並且是。
嘗試為您的bridge
聲明一個強大的屬性。 然后它不會被過早地釋放。 例如:
@property (strong, nonatomic) WebViewJavascriptBridge* bridge;
然后在您的代碼中:
self.bridge = ... // the creation code
一旦你完成了你的對象,不要忘記釋放它:
self.bridge = nil;
也許你應該改用這個庫。
self.bridge.consolePipeBlock = ^(id _Nonnull water) {
NSLog(@"Next line is javascript console.log------>>>>");
NSLog(@"%@",water);
};
這可以很容易地得到javascript console.log。
也有 Swift 語言版本。
bridge.consolePipeClosure = { water in
guard let jsConsoleLog = water else {
print("Javascript console.log give native is nil!")
return
}
print("Next line is Javascript console.log----->>>>>>>")
print(jsConsoleLog)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.