我使用基於視圖的應用程序模板創建了一個新的Xcode項目。在視圖控制器的.m中覆蓋了這個:爲什麼我的UIViewController的指定初始化程序從未被調用過?
// The designated initializer. Override to perform setup that is required before the view is loaded.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
// Custom initialization
NSLog(@"initWithNibName...");
}
return self;
}
- (id)init {
NSLog(@"initWithNibName...");
return [super init];
}
但是,我從來沒有得到NSLog。這也是我從其他項目獲得的經驗。這種方法從來沒有被調用。甚至沒有NSObject的-init。
視圖控制器是在XIB文件內部創建的。這怎麼可能,Nib加載系統在沒有任何初始化的情況下實例化這個類?
爲什麼?什麼是替代而不是-loadView和-viewDidLoad?
遠離XIB文件的另一個重要原因是什麼?
應該注意,initWithNibName:bundle:將在你使用一個nib並通過直接調用initWithNibName:bundle:來實例化視圖控制器時被調用。通常情況下,這些日子你正在使用故事板,在這種情況下,它會調用initWithCoder:相反。在故事板之前,我猜測默認的Xcode項目基於視圖的應用程序模板沒有調用initWithNibName:bundle:來初始化初始視圖控制器。 – 2015-02-06 02:35:11
@LironYahdav如果你重讀這個問題,你會注意到它表明視圖控制器在* nib文件中,所以在加載nib時不能調用'initWithNibName:bundle:'。 – jlehr 2015-02-06 14:28:15