我是Stack Overflow的新手,但是我發現了這個問題,並且發現了一些其他方法來加載一個確保viewDidLoad方法自動調用的nib文件。是正確的,但它需要你去ViewController的代碼之外來加載nib文件,這裏我提供的這兩個例子允許你將代碼保存在ViewController的實現中,不一定是更好的方法,只是不同而已。以做這種方式,請讓我知道你的想法
首先,initWithNibName內:包:你的UIViewController子類的方法,可以取代電話:
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
像這樣的東西:
self = [super initWithNibName:@"NameOfAlternateNibFile" bundle:nibBundleOrNil];
或者,你可以做到這似乎由以下做同樣的事情:
[[NSBundle mainBundle] loadNibNamed:@"NameOfAlternateNibFile" owner:self options:nil];
[self setView:self.view]; //this line ensures that the viewDidLoad method is called
的關鍵是瞭解什麼是寫在UIViewController.h文件中的函數定義$initWithNibName:bundle:
上方的註釋(在我的答案的底部包含,請參見斜體)。
使用這兩種方法之一做這件事的好處是viewDidLoad在任何一種情況下都會被調用。
以下是UIViewController.h列出的指令:
指定初始化。如果你的 子類UIViewController,你必須調用這個 方法的超級實現,即使你沒有使用 NIB。 (爲了方便,默認的 init方法將爲您執行此操作,並且 爲這兩個方法 參數指定nil。)在指定的NIB時, 文件的所有者代理應該有 類設置爲您的視圖控制器 子類,它連接到主視圖的視圖出口 。如果 調用此方法的名稱爲nil ,那麼此類的'-loadView 方法將嘗試加載名稱與您的視圖 控制器類相同的NIB 。如果沒有這樣的NIB在 事實存在,那麼您必須 電話-setView:前 - 視圖是 調用,或重寫-loadView方法以編程方式設置你的觀點。 - (ID)initWithNibName:(的NSString *)nibNameOrNil束:(一個NSBundle *)nibBundleOrNil;
不,這似乎是這種情況無論是。加載的視圖顯示正常,但viewDidLoad永遠不會被調用。我可以在從筆尖加載的「普通」控制器上的viewDidLoad中由[UIViewController的視圖]稱爲調試器堆棧看到,但似乎並不適用於控制器的製成手'。 – 2009-05-24 05:53:48