2017-08-15 9 views
0

ここに私のファイルがあります。リロードボタンをクリックすると、OBJCのsegfaultがわかるようになります。私はそれがウェブサイトだとは思っていませんが、メインには会わない/返されているものがあります。これは、main.mファイルにSIGABRTを与えます。ゾンビを有効にしようとしましたが、それが私に教えてください。UIWebViewをリロードすると、main.hファイルにSignal SIGABRTが表示されます

// 
// main.m 
// webKitExp 
// 
// Created by J.Doe on 8/14/17. 
// Copyright © 2017 J.Doe. All rights reserved. 
// 

#import <UIKit/UIKit.h> 
#import "AppDelegate.h" 

int main(int argc, char * argv[]) { 
    @autoreleasepool { 
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
    } 
} 

// 
// ViewController.h 
// webKitExp 
// 
// Created by J.Doe 
// Copyright © 2017 J.Doe. All rights reserved. 
// 

#import <UIKit/UIKit.h> 
#import <WebKit/WebKit.h> 

@interface ViewController : UIViewController 

@property (nonatomic, retain) IBOutlet UIWebView *webView; 
@end 

// 
// ViewController.m 
// webKitExp 
// 
// Created by J.Doe on 8/14/17. 
// Copyright © 2017 J.Doe. All rights reserved. 
// 

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 
@synthesize webView; 

- (void)viewDidLoad { 
[super viewDidLoad]; 
[UIView setAnimationsEnabled:NO]; 
NSString *localURL = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]; 
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL fileURLWithPath:localURL]]; 
[webView loadRequest:urlRequest]; 
} 
- (IBAction)buttonClicked:(UIButton *)sender { 
[webView reload]; 
} 


- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
} 


@end 
+0

index.htmlファイルが見つからない可能性があります。ローカルファイルの代わりにWebページをロードして、同じエラーが発生するかどうかを確認してください –

+0

これを代わりに試してみてください。 [webView loadRequest:urlRequest]; –

+0

webView loadRequestも試してみましたが、動作しませんでした。index.htmlファイルがある限り、同じファイルにあり、初めて読み込んだときには読み込まれずにクラッシュします。 –

答えて

0

ios8 +以降、UIWebviewではなくWKWebviewを使用する必要があります。 @Henly ansはSwift3にあり、ここでは同じObjective-Cバージョンです。

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    _wkWebview = [[WKWebView alloc] initWithFrame:self.view.frame]; 
    _wkWebview.navigationDelegate = self ; 
    [self.view addSubview:_wkWebview ]; 
    NSURL *url = [NSURL URLWithString:@"https://www.google.com"]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
    [_wkWebview loadRequest:request]; 

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [button addTarget:self action:@selector(reload) forControlEvents:UIControlEventTouchUpInside]; 
    [button setTitle:@"Reload" forState:UIControlStateNormal]; 
    button.frame = CGRectMake(50.0, 200.0, 50.0, 50.0); 
    [self.view addSubview:button]; 
} 

-(void)reload{ 
    [self.wkWebview reload]; 
} 

は、それはあなたなら、私はコメントで任意のクエリをお聞かせください#import <WebKit/WebKit.h> 作業作るためのWebKitをインポートすることを忘れないでください。私は試して助けます。

+0

今、私のボタンが表示されていません。私は私のバージョンを取り出し、あなたが示唆したプログラムで作成されたものに置き換えました。今では –

+0

という形で表示されません。それは、デフォルトになって白くなり、背景には表示されません。リロードについて –

0

あなたは本当にiOSの8+を実行しているアプリケーションのためWKWebviewの代わりのUIWebViewを使用する必要があります。

これは、UIViewController内でWKWebviewを使用する例です。リロードボタンを押すと(ネットワーク接続の有無に関係なく)、アプリケーションがクラッシュすることはありません。

import UIKit 
import WebKit 

class WebviewController: UIViewController, WKNavigationDelegate { 

    var wkWebview : WKWebView? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     wkWebview = WKWebView.init(frame: self.view.bounds) 
     wkWebview?.navigationDelegate = self 
     self.view.addSubview(wkWebview!) 

     let url = URL.init(string:"https://www.google.com") 
     let urlRequest: URLRequest = URLRequest.init(url: url!) 

     wkWebview?.load(urlRequest) 
     // Do any additional setup after loading the view. 

     let button = UIButton.init(frame: CGRect.init(x: 50, y: 200, width: 50, height: 50)) 
     button.setTitle("Reload", for: .normal) 
     button.backgroundColor = UIColor.black 
     self.view.addSubview(button) 
     button.addTarget(self, action: #selector(reload), for: .touchUpInside) 
     button.layer.zPosition = 101 
    } 

    func reload() { 
     self.wkWebview?.reload() 
    } 


    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    public func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) { 
     print("\(error.localizedDescription)") 
    } 

} 

Objective-Cに変換するのは難しくありません。

何のインターネットアクセスがない場合に呼び出されるWKNavigationDelegate方法

- (void)webView:(WKWebView *)webView 
     didFailProvisionalNavigation:(WKNavigation *)navigation 
     withError:(NSError *)error 

もあります。それを実装したいかもしれません。

関連する問題