簡體   English   中英

使用 WebViewJavascriptBridge 時出現 EXEC_BAD_ACCESS 錯誤

[英]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;

也許你應該改用這個庫。

SDBridgeOC

 self.bridge.consolePipeBlock = ^(id  _Nonnull water) {
        NSLog(@"Next line is javascript console.log------>>>>");
        NSLog(@"%@",water);
    };

這可以很容易地得到javascript console.log。

也有 Swift 語言版本。

SDBridgeSwift

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM