2011-02-17 71 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屬性都將爲零,直到視圖的某個請求導致其加載。在你的初始化程序中,這幾乎是肯定的問題。