2011-02-17 72 views
0

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

- (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是零,除非你在其他地方做一些晦涩难懂的事情。

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

1

当视图控制器的init方法被执行时,它还没有加载它的视图。所以prescribingInfoWebView可能是nil在这一点上(你应该检查调试器),所以你试图发送给它的消息没有影响。

0

UIViewControllers懒惰地加载它们的接口。这意味着在界面生成器或在-loadView中设置的任何UI属性都将为零,直到视图的某个请求导致其加载。在你的初始化程序中,这几乎是肯定的问题。