2012-11-12 279 views
2
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

一切工作正常。上面的代碼是由編譯器編寫的標準。沒什麼奇怪的我在viewControllers中放置了斷點,以便了解事情的進展情況。爲什麼有時initWithNibName不被調用?

有時會調用該函數。有時候不是。 ' 在所有情況下,事情工作正常。但是那個函數不被調用的情況會是什麼?

是的,我爲所有這些viewControllers使用XIB。

我注意到,直接在navigationViewController下的viewControllers是initWithNibName不會中斷的地方。我想知道爲什麼。

+0

更多信息將是有益的。這種方法在什麼情況下不被調用?如何在不調用此方法的情況下初始化控制器?你是否在使用故事板? – rdelmar

回答

3

當您的NSViewController在xib文件中定義(通常是IBOutlet)時,initWithNibName:bundle:不會被調用,而是initWithCoder:被調用。當您使用Interface Builder將您的NSViewController設置爲UITabBarController(用於UIViewController)或UINavigationController時,並且幾乎總是在使用Storyboard時,情況就是如此。

或者你可以嘗試這其中也:

myViewController *objMyViewController = [[MyViewController alloc] initWithNibName:@"WebViewController_iPhone" bundle:nil]; 
objMyViewController.managedObjectContext = self.managedObjectContext; 
navController = [[UINavigationController alloc] initWithRootViewController:objMyViewController]; 
[self.window setRootViewController:navController]; 
[window makeKeyAndVisible]; 
+0

您的意思是UIViewController,而不是NSViewController –

+0

在這兩種情況下,都需要一點改變。 –

相關問題