You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从另一ViewController导航栏触发UIWebView加载请求失败求助

解决点击按钮后WebView加载请求无效的问题

嗨,我来帮你排查下为什么点击按钮后ViewController里的WebView没加载请求的问题,咱们一步步来分析:

可能的问题点及解决办法

1. 通知发送时机不对(最可能的原因)

你现在的代码是先发送通知,再执行segue,但这时候ViewController还没完成初始化和viewDidLoad的调用——也就是说,通知发出去的时候,ViewController还没注册Observer,自然接收不到通知,加载逻辑根本没触发。

推荐方案:用Segue传值替代通知(更直接可靠)

通知适合跨页面/跨组件的异步通信,但这种场景下,直接通过segue传递数据是更简洁的方式:

在AnotherViewController里修改代码:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"toURL"]) {
        ViewController *targetVC = (ViewController *)segue.destinationViewController;
        // 直接把需要的URL字符串传给目标页面,不用走NSUserDefaults中转
        NSString *urlString = [[NSUserDefaults standardUserDefaults] stringForKey:@"urlSearch"];
        targetVC.targetURLString = urlString;
    }
}

- (IBAction)actionClick:(id)sender {
    [self performSegueWithIdentifier:@"toURL" sender:self];
}

然后在ViewController里添加属性并修改加载逻辑:

// 先添加一个接收URL的属性
@property (nonatomic, copy) NSString *targetURLString;

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    if (self.targetURLString.length > 0) {
        progressBar.progress = 0;
        progressBar.hidden = NO;
        
        // 修复URL编码问题(废弃API替换+有效性检查)
        NSString *encodedURLString = [self.targetURLString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSURL *url = [NSURL URLWithString:encodedURLString];
        
        if (url) {
            [webLoad loadRequest:[NSURLRequest requestWithURL:url]];
        } else {
            NSLog(@"生成的URL无效,请检查原始字符串:%@", self.targetURLString);
        }
    }
}

2. WebView未正确初始化或连接

检查webLoad这个WebView控件:

  • 有没有通过IBOutlet正确连接到Storyboard里的控件?
  • 如果是代码初始化的,有没有在viewDidLoad里完成初始化?

你可以在原来的Notification:方法里加个日志,确认WebView是否为nil:

- (void)Notification:(NSNotification *)notification {
    NSLog(@"webLoad状态:%@", webLoad); // 如果打印是nil,说明控件没连接/初始化
    // ... 其他代码
}

3. URL处理存在问题

你用的stringByAddingPercentEscapesUsingEncoding:NSISOLatin1StringEncoding已经被苹果废弃,而且编码方式不适合处理中文、特殊字符等场景,很可能导致生成的NSURL为nil,自然加载无效。

替换成我上面代码里的stringByAddingPercentEncodingWithAllowedCharacters,同时一定要检查生成的url是否有效(非nil)——如果是nil,说明你存在NSUserDefaults里的urlSearch值格式有问题。

4. 通知Observer的注册时机问题

如果一定要用通知方案,那必须保证通知发送时,Observer已经完成注册。你可以把发送通知的逻辑放到ViewController加载完成之后,比如在ViewController的viewDidAppear里主动触发,或者在AnotherViewController的segue完成回调里发通知,但这种方式比segue传值麻烦很多,不推荐。

内容的提问来源于stack exchange,提问作者ioscode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:59:50