从另一个视图控制器错误以编程方式启动 webview

launch a webview programmatically from another view controller error

这是我的主视图控制器:

#import "ViewController.h"
#import "WebViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    WebViewController *wvc = [[WebViewController alloc]init];
    [self presentViewController:wvc animated:NO completion:nil];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}



@end

这里是 webviewcontroller:

#import "WebViewController.h"

@interface WebViewController ()

@end

@implementation WebViewController



- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    UIWebView *webview=[[UIWebView alloc]initWithFrame:CGRectMake(0, 0, 1024,768)];
    NSString *url=@"https://www.google.com";
    NSURL *nsurl=[NSURL URLWithString:url];
    NSURLRequest *nsrequest=[NSURLRequest requestWithURL:nsurl];
    [webview loadRequest:nsrequest];
    [self.view addSubview:webview];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

google 页面未加载,我收到的警告是

Warning: Attempt to present on whose view is not in the window hierarchy!

这到底是怎么回事?

我建议仔细检查。根据您的代码,我刚刚确认了这一点:

#import "LoadPresentViewController.h"
#import "WebViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (IBAction)doLoadPresent:(id)sender {

    WebViewController *wvc = [[WebViewController alloc]init];
    [self presentViewController:wvc animated:NO completion:nil];

}


- (void)viewDidLoad {
    [super viewDidLoad];

    // this fails in viewDidLoad
//  WebViewController *wvc = [[WebViewController alloc]init];
//  [self presentViewController:wvc animated:NO completion:nil];

}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    // this succeeds in viewDidAppear
    WebViewController *wvc = [[WebViewController alloc]init];
    [self presentViewController:wvc animated:NO completion:nil];

}

@end