在初始化程序中加载 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 中加载