2012-11-12 277 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

在这两种情况下,都需要一点改变。 –

相关问题