在初始化程序中加载 webview 内容

Posted

技术标签:

【中文标题】在初始化程序中加载 webview 内容【英文标题】:load webview content in the initializer 【发布时间】:2011-02-17 22:47:12 【问题描述】:

这是一个 iPad 应用程序。您按下两个按钮之一,它会显示一个模态视图控制器,其中包含一个将显示 PDF 的 web 视图。我创建了包含 webview 的 UIViewController 类,并且我想根据用户按下的按钮使用 2 个初始化程序中的 1 个。当我初始化对象时,我想设置显示哪个 PDF。模式视图即将出现,但它是空白的(不显示 PDF)。但是,当我在 -(void)viewDidLoad 中使用相同的代码时,它确实有效。为什么是这样?谢谢!

 - (id)initAsPi
    NSLog(@"initAsPi Called");
    [super init];
    NSString *urlAddress = [[NSBundle mainBundle] pathForResource:@"PiPdf" ofType:@"pdf"];
    NSURL *url = [NSURL fileURLWithPath:urlAddress];
    NSURLRequest *urlRequestObj = [NSURLRequest requestWithURL:url];
    [prescribingInfoWebView loadRequest:urlRequestObj];
    return self;
    

【问题讨论】:

【参考方案1】:

初始化

您的初始化方法错误。阅读实现初始化程序 - 处理初始化失败 ...

http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocAllocInit.html%23//apple_ref/doc/uid/TP30001163-CH22-105377

它应该看起来像......

- (id)initAsPi 
  self = [super init];
  if ( self ) 
    // Your initialization code
  
  return self;

为什么它在 viewDidLoad 中有效,而在 initAsPi 中无效?

prescribingInfoWebView 为 nil,除非您在其他地方做一些晦涩的事情。

您可能在 loadView 方法中创建 prescribingInfoWebView,或者如果您从 XIB 加载视图,它会在视图加载期间自动初始化。

【讨论】:

【参考方案2】:

当视图控制器的 init 方法被执行时,它还没有加载它的视图。所以prescribingInfoWebView此时可能是nil(你应该用调试器检查),所以你试图发送给它的消息没有效果。

【讨论】:

【参考方案3】:

UIViewController 会延迟加载它们的接口。这意味着在 Interface Builder 或 -loadView 中设置的任何 UI 属性都将为零,直到对视图的某些请求导致它加载。在您的初始化程序中,这几乎肯定是问题所在。

【讨论】:

以上是关于在初始化程序中加载 webview 内容的主要内容,如果未能解决你的问题,请参考以下文章

在列表中加载 WebView 而无需重新加载 webView 内容 SwiftUI

Android WebView 混合内容未在 api 级别 < 21 中加载

在新线程中加载 UIWebView 内容

在 webview 中加载本地 javascript?

在 tinymce 编辑器中加载 html 文件作为初始内容

在同一个 webView 中加载不同页面的按钮